10000 fix: retrieve GatewayServer/GatewayClient resources by labels by fra98 · Pull Request #2758 · liqotech/liqo · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

fix: retrieve GatewayServer/GatewayClient resources by labels #2758

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/advanced/peering/inter-cluster-network.md
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ Resuming, these are the steps to be followed by the administrators of each of th
3. **Cluster client**: applies the server configuration:

```bash
kubectl apply -f server-client.yaml
kubectl apply -f conf-server.yaml
```

4. **Cluster server**: sets up the `GatewayServer` and provides to the cluster client administrator port and address where the server is reachable:
Expand Down
8 changes: 4 additions & 4 deletions pkg/liqo-controller-manager/networking/forge/gatewayclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ const (
DefaultGwClientTemplateName = "wireguard-client"
)

// DefaultGatewayClientName returns the default name for a GatewayClient.
func DefaultGatewayClientName(remoteClusterID liqov1beta1.ClusterID) string {
// defaultGatewayClientName returns the default name for a GatewayClient.
func defaultGatewayClientName(remoteClusterID liqov1beta1.ClusterID) string {
return string(remoteClusterID)
}

Expand All @@ -51,14 +51,14 @@ type GwClientOptions struct {
}

// GatewayClient forges a GatewayClient.
func GatewayClient(name, namespace string, o *GwClientOptions) (*networkingv1beta1.GatewayClient, error) {
func GatewayClient(namespace string, name *string, o *GwClientOptions) (*networkingv1beta1.GatewayClient, error) {
gwClient := &networkingv1beta1.GatewayClient{
TypeMeta: metav1.TypeMeta{
Kind: networkingv1beta1.GatewayClientKind,
APIVersion: networkingv1beta1.GroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Name: ptr.Deref(name, defaultGatewayClientName(o.RemoteClusterID)),
Namespace: namespace,
Labels: map[string]string{
liqoconsts.RemoteClusterID: string(o.RemoteClusterID),
Expand Down
9 changes: 5 additions & 4 deletions pkg/liqo-controller-manager/networking/forge/gatewayserver.go
10000
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/utils/ptr"

liqov1beta1 "github.com/liqotech/liqo/apis/core/v1beta1"
networkingv1beta1 "github.com/liqotech/liqo/apis/networking/v1beta1"
Expand All @@ -33,8 +34,8 @@ const (
DefaultGwServerPort = 51840
)

// DefaultGatewayServerName returns the default name for a GatewayServer.
func DefaultGatewayServerName(remoteClusterID liqov1beta1.ClusterID) string {
// defaultGatewayServerName returns the default name for a GatewayServer.
func defaultGatewayServerName(remoteClusterID liqov1beta1.ClusterID) string {
return string(remoteClusterID)
}

Expand All @@ -53,14 +54,14 @@ type GwServerOptions struct {
}

// GatewayServer forges a GatewayServer.
func GatewayServer(name, namespace string, o *GwServerOptions) (*networkingv1beta1.GatewayServer, error) {
func GatewayServer(namespace string, name *string, o *GwServerOptions) (*networkingv1beta1.GatewayServer, error) {
gwServer := &networkingv1beta1.GatewayServer{
TypeMeta: metav1.TypeMeta{
Kind: networkingv1beta1.GatewayServerKind,
APIVersion: networkingv1beta1.GroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Name: ptr.Deref(name, defaultGatewayServerName(o.RemoteClusterID)),
Namespace: namespace,
Labels: map[string]string{
liqoconsts.RemoteClusterID: string(o.RemoteClusterID),
Expand Down
118 changes: 62 additions & 56 deletions pkg/liqoctl/network/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/liqotech/liqo/pkg/liqoctl/wait"
tenantnamespace "github.com/liqotech/liqo/pkg/tenantNamespace"
liqoutils "github.com/liqotech/liqo/pkg/utils"
"github.com/liqotech/liqo/pkg/utils/getters"
)

// Cluster contains the information about a cluster.
Expand Down Expand Up @@ -216,34 +217,6 @@ func (c *Cluster) CheckNetworkInitialized(ctx context.Context, remoteClusterID l
return nil
}

// GetGatewayServer retrieves a GatewayServer.
func (c *Cluster) GetGatewayServer(ctx context.Context, name string) (*networkingv1beta1.GatewayServer, error) {
gwServer := &networkingv1beta1.GatewayServer{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: c.local.Namespace,
},
}
if err := c.local.CRClient.Get(ctx, client.ObjectKeyFromObject(gwServer), gwServer); err != nil {
return nil, err
}
return gwServer, nil
}

// GetGatewayClient retrieves a GatewayClient.
func (c *Cluster) GetGatewayClient(ctx context.Context, name string) (*networkingv1beta1.GatewayClient, error) {
gwClient := &networkingv1beta1.GatewayClient{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: c.local.Namespace,
},
}
if err := c.local.CRClient.Get(ctx, client.ObjectKeyFromObject(gwClient), gwClient); err != nil {
return nil, err
}
return gwClient, nil
}

func endpointHasChanged(endpoint *networkingv1beta1.Endpoint, service *corev1.Service) bool {
if endpoint.ServiceType != service.Spec.Type {
return true
Expand All @@ -265,9 +238,20 @@ func endpointHasChanged(endpoint *networkingv1beta1.Endpoint, service *corev1.Se
}

// EnsureGatewayServer create or updates a GatewayServer.
func (c *Cluster) EnsureGatewayServer(ctx context.Context, name string, opts *forge.GwServerOptions) (*networkingv1beta1.GatewayServer, error) {
func (c *Cluster) EnsureGatewayServer(ctx context.Context, opts *forge.GwServerOptions) (*networkingv1beta1.GatewayServer, error) {
s := c.local.Printer.StartSpinner("Setting up gateway server")
gwServer, err := forge.GatewayServer(name, c.local.Namespace, opts)

// Check if the GatewayServer already exists.
var name *string
gwServer, err := getters.GetGatewayServerByClusterID(ctx, c.local.CRClient, c.remoteClusterID)
if client.IgnoreNotFound(err) != nil {
return nil, err
} else if err == nil {
name = &gwServer.Name // reutilize the existing GatewayServer name
}

// Forge GatewayServer.
gwServer, err = forge.GatewayServer(c.local.Namespace, name, opts)
if err != nil {
s.Fail(fmt.Sprintf("An error occurred while forging gateway server: %v", output.PrettyErr(err)))
return nil, err
Expand Down Expand Up @@ -305,9 +289,19 @@ func (c *Cluster) EnsureGatewayServer(ctx context.Context, name string, opts *fo
}

// EnsureGatewayClient create or updates a GatewayClient.
func (c *Cluster) EnsureGatewayClient(ctx context.Context, name string, opts *forge.GwClientOptions) (*networkingv1beta1.GatewayClient, error) {
func (c *Cluster) EnsureGatewayClient(ctx context.Context, opts *forge.GwClientOptions) (*networkingv1beta1.GatewayClient, error) {
s := c.local.Printer.StartSpinner("Setting up gateway client")
gwClient, err := forge.GatewayClient(name, c.local.Namespace, opts)

// Check if the GatewayClient already exists.
var name *string
gwClient, err := getters.GetGatewayClientByClusterID(ctx, c.local.CRClient, c.remoteClusterID)
if client.IgnoreNotFound(err) != nil {
return nil, err
} else if err == nil {
name = &gwClient.Name // reutilize the existing GatewayClient name
}

gwClient, err = forge.GatewayClient(c.local.Namespace, name, opts)
if err != nil {
s.Fail(fmt.Sprintf("An error occurred while forging gateway client: %v", output.PrettyErr(err)))
return nil, err
Expand Down Expand Up @@ -375,17 +369,21 @@ func (c *Cluster) DeleteConfiguration(ctx context.Context, name string) error {
}

// DeleteGatewayServer deletes a GatewayServer.
func (c *Cluster) DeleteGatewayServer(ctx context.Context, name string) error {
func (c *Cluster) DeleteGatewayServer(ctx context.Context, remoteClusterID liqov1beta1.ClusterID) error {
s := c.local.Printer.StartSpinner("Deleting gateway server")

gwServer := &networkingv1beta1.GatewayServer{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: c.local.Namespace,
},
// Retrieve GatewayServer.
gwServer, err := getters.GetGatewayServerByClusterID(ctx, c.local.CRClient, remoteClusterID)
if client.IgnoreNotFound(err) != nil {
s.Fail("An error occurred while retrieving gateway server: ", output.PrettyErr(err))
return err
} else if apierrors.IsNotFound(err) {
s.Success("Gateway server already deleted")
return nil
}

err := c.local.CRClient.Delete(ctx, gwServer)
// Delete GatewayServer.
err = c.local.CRClient.Delete(ctx, gwServer)
switch {
case client.IgnoreNotFound(err) != nil:
s.Fail("An error occurred while deleting gateway server: ", output.PrettyErr(err))
Expand All @@ -400,17 +398,21 @@ func (c *Cluster) DeleteGatewayServer(ctx context.Context, name string) error {
}

// DeleteGatewayClient deletes a GatewayClient.
func (c *Cluster) DeleteGatewayClient(ctx context.Context, name string) error {
func (c *Cluster) DeleteGatewayClient(ctx context.Context, remoteClusterID liqov1beta1.ClusterID) error {
s := c.local.Printer.StartSpinner("Deleting gateway client")

gwClient := &networkingv1beta1.GatewayClient{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: c.local.Namespace,
},
// Retrieve GatewayClient.
gwClient, err := getters.GetGatewayClientByClusterID(ctx, c.local.CRClient, remoteClusterID)
if client.IgnoreNotFound(err) != nil {
s.Fail("An error occurred while retrieving gateway client: ", output.PrettyErr(err))
return err
} else if apierrors.IsNotFound(err) {
s.Success("Gateway client already deleted")
return nil
}

err := c.local.CRClient.Delete(ctx, gwClient)
// Delete GatewayClient.
err = c.local.CRClient.Delete(ctx, gwClient)
switch {
case client.IgnoreNotFound(err) != nil:
s.Fail("An error occurred while deleting gateway client: ", output.PrettyErr(err))
Expand All @@ -426,22 +428,26 @@ func (c *Cluster) DeleteGatewayClient(ctx context.Context, name string) error {

// CheckAlreadyEstablishedForGwServer checks if a GatewayServer is already established.
func (c *Cluster) CheckAlreadyEstablishedForGwServer(ctx context.Context) (bool, error) {
_, err := c.GetGatewayServer(ctx, forge.DefaultGatewayServerName(c.remoteClusterID))
if err == nil {
return true, nil
} else if client.IgnoreNotFound(err) != nil {
_, err := getters.GetGatewayServerByClusterID(ctx, c.local.CRClient, c.remoteClusterID)
switch {
case client.IgnoreNotFound(err) != nil:
return false, err
case apierrors.IsNotFound(err):
return false, nil
default:
return true, nil
}
return false, nil
}

// CheckAlreadyEstablishedForGwClient checks if a GatewayClient is already established.
func (c *Cluster) CheckAlreadyEstablishedForGwClient(ctx context.Context) (bool, error) {
_, err := c.GetGatewayClient(ctx, forge.DefaultGatewayClientName(c.remoteClusterID))
if err == nil {
return true, nil
} else if client.IgnoreNotFound(err) != nil {
_, err := getters.GetGatewayClientByClusterID(ctx, c.local.CRClient, c.remoteClusterID)
switch {
case client.IgnoreNotFound(err) != nil:
return false, err
case apierrors.IsNotFound(err):
return false, nil
default:
return true, nil
}
return false, nil
}
13 changes: 5 additions & 8 deletions pkg/liqoctl/network/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,7 @@ func (o *Options) RunConnect(ctx context.Context) error {
}

// Create gateway server on cluster 2
gwServer, err := cluster2.EnsureGatewayServer(ctx,
forge.DefaultGatewayServerName(cluster1.localClusterID),
o.newGatewayServerForgeOptions(o.RemoteFactory.KubeClient, cluster1.localClusterID))
gwServer, err := cluster2.EnsureGatewayServer(ctx, o.newGatewayServerForgeOptions(o.RemoteFactory.KubeClient, cluster1.localClusterID))
if err != nil {
return err
}
Expand All @@ -209,7 +207,6 @@ func (o *Options) RunConnect(ctx context.Context) error {

// Create gateway client on cluster 1
gwClient, err := cluster1.EnsureGatewayClient(ctx,
forge.DefaultGatewayClientName(cluster2.localClusterID),
o.newGatewayClientForgeOptions(o.LocalFactory.KubeClient, cluster2.localClusterID, gwServer.Status.Endpoint))
if err != nil {
return err
Expand Down Expand Up @@ -303,22 +300,22 @@ func (o *Options) RunDisconnect(ctx context.Context, cluster1, cluster2 *Cluster
}

// Delete gateway client on cluster 1
if err := cluster1.DeleteGatewayClient(ctx, forge.DefaultGatewayClientName(cluster2.localClusterID)); err != nil {
if err := cluster1.DeleteGatewayClient(ctx, cluster2.localClusterID); err != nil {
return err
}

// Delete gateway client on cluster 2
if err := cluster2.DeleteGatewayClient(ctx, forge.DefaultGatewayClientName(cluster1.localClusterID)); err != nil {
if err := cluster2.DeleteGatewayClient(ctx, cluster1.localClusterID); err != nil {
return err
}

// Delete gateway server on cluster 1
if err := cluster1.DeleteGatewayServer(ctx, forge.DefaultGatewayServerName(cluster2.localClusterID)); err != nil {
if err := cluster1.DeleteGatewayServer(ctx, cluster2.localClusterID); err != nil {
return err
}

// Delete gateway server on cluster 2
return cluster2.DeleteGatewayServer(ctx, forge.DefaultGatewayServerName(cluster1.localClusterID))
return cluster2.DeleteGatewayServer(ctx, cluster1.localClusterID)
}

func (o *Options) newGatewayServerForgeOptions(kubeClient kubernetes.Interface, remoteClusterID liqov1beta1.ClusterID) *forge.GwServerOptions {
Expand Down
2 changes: 1 addition & 1 deletion pkg/liqoctl/rest/gatewayclient/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func (o *Options) Create(ctx context.Context, options *rest.CreateOptions) *cobr
func (o *Options) handleCreate(ctx context.Context) error {
opts := o.createOptions

gwClient, err := forge.GatewayClient(opts.Name, opts.Namespace, o.getForgeOptions())
gwClient, err := forge.GatewayClient(opts.Namespace, &opts.Name, o.getForgeOptions())
if err != nil {
opts.Printer.CheckErr(err)
return err
Expand Down
2 changes: 1 addition & 1 deletion pkg/liqoctl/rest/gatewayserver/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func (o *Options) Create(ctx context.Context, options *rest.CreateOptions) *cobr
func (o *Options) handleCreate(ctx context.Context) error {
opts := o.createOptions

gwServer, err := forge.GatewayServer(opts.Name, opts.Namespace, o.getForgeOptions())
gwServer, err := forge.GatewayServer(opts.Namespace, &opts.Name, o.getForgeOptions())
if err != nil {
opts.Printer.CheckErr(err)
return err
Expand Down
0