refactor: move api, client, compose packages to pkg

This commit is contained in:
Pavel Sviderski
2025-03-22 18:43:00 +10:00
parent 3757813b20
commit b1abd07dde
42 changed files with 82 additions and 82 deletions
+3 -3
View File
@@ -6,13 +6,13 @@ import (
"fmt" "fmt"
"github.com/docker/cli/cli/streams" "github.com/docker/cli/cli/streams"
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"maps" "maps"
"slices" "slices"
"strings" "strings"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
type deployOptions struct { type deployOptions struct {
+3 -3
View File
@@ -6,11 +6,11 @@ import (
"fmt" "fmt"
"github.com/compose-spec/compose-go/v2/types" "github.com/compose-spec/compose-go/v2/types"
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/pkg/client"
"github.com/psviderski/uncloud/pkg/compose"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"strings" "strings"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/compose"
) )
type deployOptions struct { type deployOptions struct {
+4 -4
View File
@@ -4,13 +4,13 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"github.com/psviderski/uncloud/cmd/uncloud/caddy"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"github.com/psviderski/uncloud/cmd/uncloud/caddy"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
const DefaultUncloudDNSAPIEndpoint = "https://dns.uncloud.run/v1" const DefaultUncloudDNSAPIEndpoint = "https://dns.uncloud.run/v1"
+2 -2
View File
@@ -4,9 +4,9 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"github.com/spf13/cobra"
"github.com/psviderski/uncloud/internal/cli" "github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client" "github.com/psviderski/uncloud/pkg/client"
"github.com/spf13/cobra"
) )
type showOptions struct { type showOptions struct {
+5 -5
View File
@@ -6,17 +6,17 @@ import (
"fmt" "fmt"
"github.com/cenkalti/backoff/v4" "github.com/cenkalti/backoff/v4"
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/psviderski/uncloud/cmd/uncloud/caddy"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/config"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/emptypb"
"net/netip" "net/netip"
"time" "time"
"github.com/psviderski/uncloud/cmd/uncloud/caddy"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/cli/config"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
type addOptions struct { type addOptions struct {
+4 -4
View File
@@ -3,13 +3,13 @@ package service
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/api"
"github.com/psviderski/uncloud/pkg/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"slices" "slices"
"strings" "strings"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
type runOptions struct { type runOptions struct {
+2 -2
View File
@@ -5,10 +5,10 @@ import (
"fmt" "fmt"
"github.com/charmbracelet/huh" "github.com/charmbracelet/huh"
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/psviderski/uncloud/internal/cli"
"github.com/psviderski/uncloud/pkg/api"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"strconv" "strconv"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/cli"
) )
type scaleOptions struct { type scaleOptions struct {
+4 -4
View File
@@ -5,15 +5,15 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/docker/cli/cli/streams" "github.com/docker/cli/cli/streams"
"net/netip"
"os"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/cli/client/connector"
"github.com/psviderski/uncloud/internal/cli/config" "github.com/psviderski/uncloud/internal/cli/config"
"github.com/psviderski/uncloud/internal/fs" "github.com/psviderski/uncloud/internal/fs"
"github.com/psviderski/uncloud/internal/machine" "github.com/psviderski/uncloud/internal/machine"
"github.com/psviderski/uncloud/internal/machine/api/pb" "github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/sshexec" "github.com/psviderski/uncloud/internal/sshexec"
"github.com/psviderski/uncloud/pkg/client"
"github.com/psviderski/uncloud/pkg/client/connector"
"net/netip"
"os"
"github.com/charmbracelet/huh" "github.com/charmbracelet/huh"
"google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/emptypb"
+2 -2
View File
@@ -8,14 +8,14 @@ import (
"github.com/caddyserver/caddy/v2/caddyconfig" "github.com/caddyserver/caddy/v2/caddyconfig"
"github.com/caddyserver/caddy/v2/modules/caddyhttp" "github.com/caddyserver/caddy/v2/modules/caddyhttp"
"github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy" "github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy"
"github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/pkg/api"
"log/slog" "log/slog"
"maps" "maps"
"net" "net"
"net/http" "net/http"
"slices" "slices"
"strconv" "strconv"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/docker"
) )
func GenerateConfig(containers []api.Container, verifyResponse string) (*caddy.Config, error) { func GenerateConfig(containers []api.Container, verifyResponse string) (*caddy.Config, error) {
+2 -2
View File
@@ -4,12 +4,12 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/network"
"github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/pkg/api"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"strings" "strings"
"testing" "testing"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/docker"
) )
func TestGenerateConfig(t *testing.T) { func TestGenerateConfig(t *testing.T) {
+3 -3
View File
@@ -4,12 +4,12 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/psviderski/uncloud/internal/fs"
"github.com/psviderski/uncloud/internal/machine/store"
"github.com/psviderski/uncloud/pkg/api"
"log/slog" "log/slog"
"os" "os"
"path/filepath" "path/filepath"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/fs"
"github.com/psviderski/uncloud/internal/machine/store"
) )
const ( const (
+2 -2
View File
@@ -8,10 +8,10 @@ import (
"github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/psviderski/uncloud/internal/machine/store"
"github.com/psviderski/uncloud/pkg/api"
"log/slog" "log/slog"
"time" "time"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/store"
) )
const ( const (
+1 -1
View File
@@ -5,10 +5,10 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
"github.com/psviderski/uncloud/pkg/api"
"log/slog" "log/slog"
"strings" "strings"
"time" "time"
"github.com/psviderski/uncloud/internal/api"
) )
const ( const (
+3 -3
View File
@@ -9,14 +9,14 @@ import (
"github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/image"
dockerclient "github.com/docker/docker/client" dockerclient "github.com/docker/docker/client"
"github.com/docker/go-connections/nat" "github.com/docker/go-connections/nat"
"github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/pkg/client"
"github.com/psviderski/uncloud/pkg/client/connector"
"google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/emptypb"
"io" "io"
"net" "net"
"net/netip" "net/netip"
"time" "time"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/cli/client/connector"
"github.com/psviderski/uncloud/internal/secret"
) )
const ( const (
@@ -6,11 +6,11 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/distribution/reference" "github.com/distribution/reference"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"maps" "maps"
"reflect" "reflect"
"regexp" "regexp"
"slices" "slices"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
const ( const (
@@ -6,7 +6,7 @@ import (
"github.com/distribution/reference" "github.com/distribution/reference"
"github.com/google/go-containerregistry/pkg/name" "github.com/google/go-containerregistry/pkg/name"
"github.com/google/go-containerregistry/pkg/v1/remote" "github.com/google/go-containerregistry/pkg/v1/remote"
"github.com/psviderski/uncloud/internal/api" "github.com/psviderski/uncloud/pkg/api"
"regexp" "regexp"
) )
@@ -1,10 +1,10 @@
package client package client
import ( import (
"github.com/psviderski/uncloud/pkg/api"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"testing" "testing"
"github.com/psviderski/uncloud/internal/api"
) )
func TestClient_NewCaddyDeployment(t *testing.T) { func TestClient_NewCaddyDeployment(t *testing.T) {
@@ -2,8 +2,8 @@ package client
import ( import (
"context" "context"
"google.golang.org/protobuf/types/known/emptypb"
"github.com/psviderski/uncloud/internal/machine/api/pb" "github.com/psviderski/uncloud/internal/machine/api/pb"
"google.golang.org/protobuf/types/known/emptypb"
) )
func (cli *Client) InspectMachine(ctx context.Context, id string) (*pb.MachineMember, error) { func (cli *Client) InspectMachine(ctx context.Context, id string) (*pb.MachineMember, error) {
@@ -6,8 +6,8 @@ import (
"fmt" "fmt"
"github.com/compose-spec/compose-go/v2/graph" "github.com/compose-spec/compose-go/v2/graph"
"github.com/compose-spec/compose-go/v2/types" "github.com/compose-spec/compose-go/v2/types"
"github.com/psviderski/uncloud/internal/api" "github.com/psviderski/uncloud/pkg/api"
"github.com/psviderski/uncloud/internal/compose" "github.com/psviderski/uncloud/pkg/compose"
) )
func (cli *Client) NewComposeDeployment(ctx context.Context, project *types.Project) (*ComposeDeployment, error) { func (cli *Client) NewComposeDeployment(ctx context.Context, project *types.Project) (*ComposeDeployment, error) {
@@ -3,16 +3,16 @@ package connector
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/psviderski/uncloud/internal/cli/config"
machine2 "github.com/psviderski/uncloud/internal/machine"
"github.com/psviderski/uncloud/internal/machine/network"
"github.com/psviderski/uncloud/internal/machine/network/tunnel"
"github.com/psviderski/uncloud/pkg/client"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"net" "net"
"net/netip" "net/netip"
"strconv" "strconv"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/cli/config"
machine2 "github.com/psviderski/uncloud/internal/machine"
"github.com/psviderski/uncloud/internal/machine/network"
"github.com/psviderski/uncloud/internal/machine/network/tunnel"
) )
// WireGuardConnector establishes a connection to the cluster API through a WireGuard tunnel // WireGuardConnector establishes a connection to the cluster API through a WireGuard tunnel
@@ -10,12 +10,12 @@ import (
dockerclient "github.com/docker/docker/client" dockerclient "github.com/docker/docker/client"
"github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/jsonmessage"
"github.com/docker/go-connections/nat" "github.com/docker/go-connections/nat"
machinedocker "github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/pkg/api"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"strconv" "strconv"
"strings" "strings"
"github.com/psviderski/uncloud/internal/api"
machinedocker "github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/internal/secret"
) )
// CreateContainer creates a new container for the given service on the specified machine. // CreateContainer creates a new container for the given service on the specified machine.
@@ -4,8 +4,8 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/api/pb" "github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/api"
) )
// Deployment manages the process of creating or updating a service to match a desired state. // Deployment manages the process of creating or updating a service to match a desired state.
@@ -6,14 +6,14 @@ import (
"fmt" "fmt"
"github.com/cenkalti/backoff/v4" "github.com/cenkalti/backoff/v4"
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/machine/caddyfile"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"io" "io"
"net/http" "net/http"
"sync" "sync"
"time" "time"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/machine/caddyfile"
) )
// GetDomain returns the cluster domain name or ErrNotFound if it hasn't been reserved yet. // GetDomain returns the cluster domain name or ErrNotFound if it hasn't been reserved yet.
@@ -4,8 +4,8 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/psviderski/uncloud/pkg/api"
"strings" "strings"
"github.com/psviderski/uncloud/internal/api"
) )
// Operation represents a single atomic operation in a deployment process. // Operation represents a single atomic operation in a deployment process.
@@ -3,8 +3,8 @@ package client
import ( import (
"fmt" "fmt"
"github.com/distribution/reference" "github.com/distribution/reference"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/secret" "github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/pkg/api"
"strings" "strings"
) )
@@ -7,13 +7,13 @@ import (
"github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/progress"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/pkg/api"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata" "google.golang.org/grpc/metadata"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"slices" "slices"
"sync" "sync"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/api/pb"
) )
func (cli *Client) PrepareDeploymentSpec(ctx context.Context, spec api.ServiceSpec) (api.ServiceSpec, error) { func (cli *Client) PrepareDeploymentSpec(ctx context.Context, spec api.ServiceSpec) (api.ServiceSpec, error) {
@@ -3,11 +3,11 @@ package client
import ( import (
"context" "context"
"fmt" "fmt"
"math/rand/v2"
"slices"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/machine/api/pb" "github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/secret" "github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/pkg/api"
"math/rand/v2"
"slices"
) )
// Strategy defines how a service should be deployed or updated. Different implementations can provide various // Strategy defines how a service should be deployed or updated. Different implementations can provide various
@@ -2,10 +2,10 @@ package client
import ( import (
"fmt" "fmt"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
"net/netip"
"github.com/psviderski/uncloud/internal/machine/network" "github.com/psviderski/uncloud/internal/machine/network"
"github.com/psviderski/uncloud/internal/secret" "github.com/psviderski/uncloud/internal/secret"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
"net/netip"
) )
type User struct { type User struct {
@@ -3,7 +3,7 @@ package compose
import ( import (
"fmt" "fmt"
"github.com/compose-spec/compose-go/v2/types" "github.com/compose-spec/compose-go/v2/types"
"github.com/psviderski/uncloud/internal/api" "github.com/psviderski/uncloud/pkg/api"
) )
const PortsExtensionKey = "x-ports" const PortsExtensionKey = "x-ports"
@@ -3,7 +3,7 @@ package compose
import ( import (
"fmt" "fmt"
"github.com/compose-spec/compose-go/v2/types" "github.com/compose-spec/compose-go/v2/types"
"github.com/psviderski/uncloud/internal/api" "github.com/psviderski/uncloud/pkg/api"
) )
func ServiceSpecFromCompose(name string, service types.ServiceConfig) (api.ServiceSpec, error) { func ServiceSpecFromCompose(name string, service types.ServiceConfig) (api.ServiceSpec, error) {
+2 -2
View File
@@ -2,11 +2,11 @@ package e2e
import ( import (
mapset "github.com/deckarep/golang-set/v2" mapset "github.com/deckarep/golang-set/v2"
"github.com/psviderski/uncloud/pkg/api"
"github.com/psviderski/uncloud/pkg/client"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"testing" "testing"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/cli/client"
) )
func assertServiceMatchesSpec(t *testing.T, svc api.Service, spec api.ServiceSpec) { func assertServiceMatchesSpec(t *testing.T, svc api.Service, spec api.ServiceSpec) {
+3 -3
View File
@@ -4,6 +4,9 @@ import (
"context" "context"
"errors" "errors"
dockerclient "github.com/docker/docker/client" dockerclient "github.com/docker/docker/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/ucind"
"github.com/psviderski/uncloud/pkg/client"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
@@ -11,9 +14,6 @@ import (
"os" "os"
"testing" "testing"
"time" "time"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"github.com/psviderski/uncloud/internal/ucind"
) )
func createTestCluster( func createTestCluster(
+3 -3
View File
@@ -3,10 +3,10 @@ package e2e
import ( import (
"context" "context"
"errors" "errors"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/compose"
"github.com/psviderski/uncloud/internal/ucind" "github.com/psviderski/uncloud/internal/ucind"
"github.com/psviderski/uncloud/pkg/api"
"github.com/psviderski/uncloud/pkg/client"
"github.com/psviderski/uncloud/pkg/compose"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"testing" "testing"
+6 -6
View File
@@ -5,17 +5,17 @@ import (
"errors" "errors"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/go-connections/nat" "github.com/docker/go-connections/nat"
"github.com/psviderski/uncloud/internal/machine/api/pb"
machinedocker "github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/internal/ucind"
"github.com/psviderski/uncloud/pkg/api"
"github.com/psviderski/uncloud/pkg/client"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"net/netip" "net/netip"
"strings" "strings"
"testing" "testing"
"github.com/psviderski/uncloud/internal/api"
"github.com/psviderski/uncloud/internal/cli/client"
"github.com/psviderski/uncloud/internal/machine/api/pb"
machinedocker "github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/internal/secret"
"github.com/psviderski/uncloud/internal/ucind"
) )
func newServiceID() string { func newServiceID() string {