diff --git a/internal/gatewayapi/resource/load.go b/internal/gatewayapi/resource/load.go index d9bcaa9b14..e3357b0b27 100644 --- a/internal/gatewayapi/resource/load.go +++ b/internal/gatewayapi/resource/load.go @@ -99,6 +99,8 @@ func loadKubernetesYAMLToResources(input []byte, addMissingResources bool) (*Res } kobjVal := reflect.ValueOf(kobj).Elem() spec := kobjVal.FieldByName("Spec") + data := kobjVal.FieldByName("Data") + stringData := kobjVal.FieldByName("StringData") switch gvk.Kind { case KindEnvoyProxy: @@ -311,6 +313,34 @@ func loadKubernetesYAMLToResources(input []byte, addMissingResources bool) (*Res Spec: typedSpec.(egv1a1.BackendSpec), } resources.Backends = append(resources.Backends, backend) + case KindSecret: + typedData := data.Interface() + typedStringData := stringData.Interface() + secret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: KindSecret, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Data: typedData.(map[string][]byte), + StringData: typedStringData.(map[string]string), + } + resources.Secrets = append(resources.Secrets, secret) + case KindConfigMap: + typedData := data.Interface() + configMap := &corev1.ConfigMap{ + TypeMeta: metav1.TypeMeta{ + Kind: KindConfigMap, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Data: typedData.(map[string]string), + } + resources.ConfigMaps = append(resources.ConfigMaps, configMap) } return nil diff --git a/internal/gatewayapi/resource/testdata/all-resources.in.yaml b/internal/gatewayapi/resource/testdata/all-resources.in.yaml index 733660178e..6bb5994374 100644 --- a/internal/gatewayapi/resource/testdata/all-resources.in.yaml +++ b/internal/gatewayapi/resource/testdata/all-resources.in.yaml @@ -229,3 +229,40 @@ spec: - ip: address: 0.0.0.0 port: 4321 +--- +apiVersion: v1 +kind: Secret +metadata: + name: secret-with-data-and-string-data + namespace: default +data: + .secret-file: dmFsdWUtMg0KDQo= +stringData: + secret: "literal value" +--- +apiVersion: v1 +kind: Secret +metadata: + name: secret-with-data + namespace: default +data: + .secret-file: dmFsdWUtMg0KDQo= +--- +apiVersion: v1 +kind: Secret +metadata: + name: secret-with-string-data + namespace: default +stringData: + secret: "literal value" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap + namespace: default +data: + player_initial_lives: "3" + game.properties: | + enemy.types=aliens,monsters + player.maximum-lives=5 diff --git a/internal/gatewayapi/resource/testdata/all-resources.out.yaml b/internal/gatewayapi/resource/testdata/all-resources.out.yaml index 162b782ab2..00f0bf210c 100644 --- a/internal/gatewayapi/resource/testdata/all-resources.out.yaml +++ b/internal/gatewayapi/resource/testdata/all-resources.out.yaml @@ -71,6 +71,17 @@ clientTrafficPolicies: requestReceivedTimeout: 50ms status: ancestors: null +configMaps: +- data: + game.properties: | + enemy.types=aliens,monsters + player.maximum-lives=5 + player_initial_lives: "3" + kind: ConfigMap + metadata: + creationTimestamp: null + name: configmap + namespace: default envoyPatchPolicies: - kind: EnvoyPatchPolicy metadata: @@ -234,6 +245,30 @@ namespaces: name: gateway-conformance-infra spec: {} status: {} +secrets: +- data: + .secret-file: dmFsdWUtMg0KDQo= + kind: Secret + metadata: + creationTimestamp: null + name: secret-with-data-and-string-data + namespace: default + stringData: + secret: literal value +- data: + .secret-file: dmFsdWUtMg0KDQo= + kind: Secret + metadata: + creationTimestamp: null + name: secret-with-data + namespace: default +- kind: Secret + metadata: + creationTimestamp: null + name: secret-with-string-data + namespace: default + stringData: + secret: literal value securityPolicies: - kind: SecurityPolicy metadata: diff --git a/release-notes/current.yaml b/release-notes/current.yaml index cf57e3ed3b..a72b97fe86 100644 --- a/release-notes/current.yaml +++ b/release-notes/current.yaml @@ -18,6 +18,7 @@ new features: | Added support for HorizontalPodAutoscaler to helm chart bug fixes: | + Added support for Secret and ConfigMap parsing in Standalone mode. Bypass overload manager for stats and ready listeners # Enhancements that improve performance.