-
Notifications
You must be signed in to change notification settings - Fork 2k
Closed
Description
Creating a Service from a Yaml specficiation which specifies a targetPort:
try {
CoreV1Api api = new CoreV1Api();
String serviceYaml =
"apiVersion: v1\n" +
"kind: Service\n" +
"metadata:\n" +
" name:\n" +
" service-name\n" +
"spec:\n" +
" ports:\n" +
" - port: 1000\n" +
" targetPort: 1000";
V1Service service = YamlBugFix.loadAs(serviceYaml, V1Service.class);
api.createNamespacedService("default", service, null);
} catch (ApiException err) {
System.out.println(err.getResponseBody());
}
results in the following error:
{
"kind":"Status",
"apiVersion":"v1",
"metadata":{},
"status":"Failure",
"message":"Service \"service-name\" is invalid: spec.ports[0].targetPort: Invalid value: \"1000\": must contain at least one letter or number (a-z, 0-9)",
"reason":"Invalid",
"details": {
"name":"service-name",
"kind":"Service",
"causes": [
{
"reason":"FieldValueInvalid",
"message":"Invalid value: \"1000\": must contain at least one letter or number (a-z, 0-9)",
"field":"spec.ports[0].targetPort"
}
]
},
"code":422
}
This is because the Yaml loader defaults to the IntOrString(String) constructor, even when an integer is given in the Yaml spec.
Metadata
Metadata
Assignees
Labels
No labels