woodpecker/pipeline/backend/kubernetes/service.go
Neil Hanlon a95a5b43bf
fix(backend/kubernetes): Ensure valid naming of name field (#1661)
- Kubernetes v1.26 on VKE causes error when creating persistent volume
claim because of uppercase characters in name field

This patch is trivial just in order to get it working - happy to
implement differently.

The error in question:

```
The PersistentVolumeClaim "wp-01G1131R63FWBSPMA4ZAZTKLE-0-clone-0" is invalid: metadata.name: Invalid value: "wp-01G1131R63FWBSPMA4ZAZTKLE-0-clone-0": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
```
2023-03-21 20:00:45 +01:00

43 lines
892 B
Go

package kubernetes
import (
"fmt"
"strconv"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)
func Service(namespace, name, podName string, ports []string) (*v1.Service, error) {
var svcPorts []v1.ServicePort
for _, p := range ports {
i, err := strconv.Atoi(p)
if err != nil {
return nil, fmt.Errorf("Could not parse service port %s as integer", p)
}
svcPorts = append(svcPorts, v1.ServicePort{
Port: int32(i),
TargetPort: intstr.IntOrString{IntVal: int32(i)},
})
}
dnsName, err := dnsName(name)
if err != nil {
return nil, err
}
return &v1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: dnsName,
Namespace: namespace,
},
Spec: v1.ServiceSpec{
Type: v1.ServiceTypeClusterIP,
Selector: map[string]string{
"step": podName,
},
Ports: svcPorts,
},
}, nil
}