Skip to content

Commit e394087

Browse files
authored
Merge pull request #20 from OpenSlides/feature/backendmanage-address-discovery
Add service discovery k8s action for backendmanage address
2 parents 0f74d96 + 332cbd4 commit e394087

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

cmd/osmanage/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func RootCmd() *cobra.Command {
8080
k8sActions.UpdateBackendmanageCmd(),
8181
k8sActions.UpdateInstanceCmd(),
8282
k8sActions.ScaleCmd(),
83+
k8sActions.GetServiceAddressCmd(),
8384
)
8485

8586
rootCmd.AddCommand(
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package actions
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/OpenSlides/openslides-cli/internal/k8s/client"
8+
"github.com/OpenSlides/openslides-cli/internal/utils"
9+
"github.com/spf13/cobra"
10+
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
)
13+
14+
const (
15+
GetServiceAddressHelp = "Get service ClusterIP:Port address"
16+
GetServiceAddressHelpExtra = `Returns the service ClusterIP:Port for the given instance and service name.
17+
18+
Examples:
19+
osmanage k8s get-service-address ./my.instance.dir.org backendmanage
20+
osmanage k8s get-service-address ./my.instance.dir.org backendmanage --kubeconfig ~/.kube/config`
21+
)
22+
23+
func GetServiceAddressCmd() *cobra.Command {
24+
cmd := &cobra.Command{
25+
Use: "get-service-address <instance-dir> <service-name>",
26+
Short: GetServiceAddressHelp,
27+
Long: GetServiceAddressHelp + "\n\n" + GetServiceAddressHelpExtra,
28+
Args: cobra.ExactArgs(2),
29+
}
30+
31+
kubeconfig := cmd.Flags().String("kubeconfig", "", "Path to kubeconfig file")
32+
33+
cmd.RunE = func(cmd *cobra.Command, args []string) error {
34+
instanceDir := args[0]
35+
serviceName := args[1]
36+
37+
namespace := utils.ExtractNamespace(instanceDir)
38+
39+
k8sClient, err := client.New(*kubeconfig)
40+
if err != nil {
41+
return fmt.Errorf("creating k8s client: %w", err)
42+
}
43+
44+
ctx := context.Background()
45+
svc, err := k8sClient.Clientset().CoreV1().Services(namespace).Get(ctx, serviceName, metav1.GetOptions{})
46+
if err != nil {
47+
return fmt.Errorf("getting service %s: %w", serviceName, err)
48+
}
49+
50+
if svc.Spec.ClusterIP == "" {
51+
return fmt.Errorf("service %s has no ClusterIP", serviceName)
52+
}
53+
54+
if len(svc.Spec.Ports) == 0 {
55+
return fmt.Errorf("service %s has no ports", serviceName)
56+
}
57+
58+
port := svc.Spec.Ports[0].Port
59+
address := fmt.Sprintf("%s:%d", svc.Spec.ClusterIP, port)
60+
61+
fmt.Println(address)
62+
return nil
63+
}
64+
65+
return cmd
66+
}

0 commit comments

Comments
 (0)