Skip to content
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
134 changes: 7 additions & 127 deletions cmd/nerdctl/compose.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,7 @@
package main

import (
"context"
"errors"
"fmt"

"github.com/containerd/containerd"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/platforms"
"github.com/containerd/nerdctl/pkg/api/types"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/containerd/nerdctl/pkg/composer/serviceparser"
"github.com/containerd/nerdctl/pkg/cosignutil"
"github.com/containerd/nerdctl/pkg/imgutil"
"github.com/containerd/nerdctl/pkg/ipfs"
"github.com/containerd/nerdctl/pkg/netutil"
"github.com/containerd/nerdctl/pkg/referenceutil"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/sirupsen/logrus"

"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -81,33 +64,26 @@ func newComposeCommand() *cobra.Command {
return composeCommand
}

func getComposer(cmd *cobra.Command, client *containerd.Client, globalOptions *types.GlobalCommandOptions) (*composer.Composer, error) {
func getComposeOptions(cmd *cobra.Command, debugFull, experimental bool) (composer.Options, error) {
nerdctlCmd, nerdctlArgs := globalFlags(cmd)
projectDirectory, err := cmd.Flags().GetString("project-directory")
if err != nil {
return nil, err
return composer.Options{}, err
}
envFile, err := cmd.Flags().GetString("env-file")
if err != nil {
return nil, err
return composer.Options{}, err
}
projectName, err := cmd.Flags().GetString("project-name")
if err != nil {
return nil, err
return composer.Options{}, err
}
debugFull := globalOptions.DebugFull
snapshotter := globalOptions.Snapshotter
files, err := cmd.Flags().GetStringArray("file")
if err != nil {
return nil, err
return composer.Options{}, err
}
insecure := globalOptions.InsecureRegistry
cniPath := globalOptions.CNIPath
cniNetconfpath := globalOptions.CNINetConfPath
hostsDirs := globalOptions.HostsDir
experimental := globalOptions.Experimental

o := composer.Options{
return composer.Options{
Project: projectName,
ProjectDirectory: projectDirectory,
ConfigPaths: files,
Expand All @@ -116,101 +92,5 @@ func getComposer(cmd *cobra.Command, client *containerd.Client, globalOptions *t
NerdctlArgs: nerdctlArgs,
DebugPrintFull: debugFull,
Experimental: experimental,
}

cniEnv, err := netutil.NewCNIEnv(cniPath, cniNetconfpath, netutil.WithDefaultNetwork())
if err != nil {
return nil, err
}
networkConfigs, err := cniEnv.NetworkList()
if err != nil {
return nil, err
}

o.NetworkExists = func(netName string) (bool, error) {
for _, f := range networkConfigs {
if f.Name == netName {
return true, nil
}
}
return false, nil
}

volStore, err := getVolumeStore(globalOptions)
if err != nil {
return nil, err
}

o.VolumeExists = func(volName string) (bool, error) {
if _, volGetErr := volStore.Get(volName, false); volGetErr == nil {
return true, nil
} else if errors.Is(volGetErr, errdefs.ErrNotFound) {
return false, nil
} else {
return false, volGetErr
}
}

o.ImageExists = func(ctx context.Context, rawRef string) (bool, error) {
refNamed, err := referenceutil.ParseAny(rawRef)
if err != nil {
return false, err
}
ref := refNamed.String()
if _, err := client.ImageService().Get(ctx, ref); err != nil {
if errors.Is(err, errdefs.ErrNotFound) {
return false, nil
}
return false, err
}
return true, nil
}

o.EnsureImage = func(ctx context.Context, imageName, pullMode, platform string, ps *serviceparser.Service, quiet bool) error {
ocispecPlatforms := []ocispec.Platform{platforms.DefaultSpec()}
if platform != "" {
parsed, err := platforms.Parse(platform)
if err != nil {
return err
}
ocispecPlatforms = []ocispec.Platform{parsed} // no append
}

// IPFS reference
if scheme, ref, err := referenceutil.ParseIPFSRefWithScheme(imageName); err == nil {
_, err = ipfs.EnsureImage(ctx, client, cmd.OutOrStdout(), cmd.ErrOrStderr(), snapshotter, scheme, ref,
pullMode, ocispecPlatforms, nil, quiet)
return err
}

ref := imageName
if verifier, ok := ps.Unparsed.Extensions[serviceparser.ComposeVerify]; ok {
switch verifier {
case "cosign":
if !o.Experimental {
return fmt.Errorf("cosign only work with enable experimental feature")
}

// if key is given, use key mode, otherwise use keyless mode.
keyRef := ""
if keyVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignPublicKey]; ok {
keyRef = keyVal.(string)
}

ref, err = cosignutil.VerifyCosign(ctx, ref, keyRef, hostsDirs)
if err != nil {
return err
}
case "none":
logrus.Debugf("verification process skipped")
default:
return fmt.Errorf("no verifier found: %s", verifier)
}
}
_, err = imgutil.EnsureImage(ctx, client, cmd.OutOrStdout(), cmd.ErrOrStderr(), snapshotter, ref,
pullMode, insecure, hostsDirs, ocispecPlatforms, nil, quiet)
return err
}

return composer.New(o, client)
}, nil
}
8 changes: 6 additions & 2 deletions cmd/nerdctl/compose_build.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -60,8 +61,11 @@ func composeBuildAction(cmd *cobra.Command, args []string) error {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}
Expand Down
9 changes: 7 additions & 2 deletions cmd/nerdctl/compose_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"

"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -73,11 +74,15 @@ func composeConfigAction(cmd *cobra.Command, args []string) error {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}

if quiet {
return nil
}
Expand Down
8 changes: 6 additions & 2 deletions cmd/nerdctl/compose_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"errors"

"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -73,8 +74,11 @@ func composeCreateAction(cmd *cobra.Command, args []string) error {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}
Expand Down
9 changes: 7 additions & 2 deletions cmd/nerdctl/compose_down.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -55,11 +56,15 @@ func composeDownAction(cmd *cobra.Command, args []string) error {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}

downOpts := composer.DownOptions{
RemoveVolumes: volumes,
RemoveOrphans: removeOrphans,
Expand Down
8 changes: 6 additions & 2 deletions cmd/nerdctl/compose_exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"errors"

"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -104,8 +105,11 @@ func composeExecAction(cmd *cobra.Command, args []string) error {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}
Expand Down
7 changes: 6 additions & 1 deletion cmd/nerdctl/compose_images.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/containerd/containerd/pkg/progress"
"github.com/containerd/containerd/snapshots"
"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/imgutil"
"github.com/containerd/nerdctl/pkg/labels"
"github.com/containerd/nerdctl/pkg/strutil"
Expand Down Expand Up @@ -62,7 +63,11 @@ func composeImagesAction(cmd *cobra.Command, args []string) error {
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}
Expand Down
9 changes: 8 additions & 1 deletion cmd/nerdctl/compose_kill.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand All @@ -43,15 +44,21 @@ func composeKillAction(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}

client, ctx, cancel, err := clientutil.NewClient(cmd.Context(), globalOptions.Namespace, globalOptions.Address)
if err != nil {
return err
}
defer cancel()
c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}

killOpts := composer.KillOptions{
Signal: signal,
}
Expand Down
10 changes: 8 additions & 2 deletions cmd/nerdctl/compose_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"github.com/containerd/nerdctl/pkg/clientutil"
"github.com/containerd/nerdctl/pkg/cmd/compose"
"github.com/containerd/nerdctl/pkg/composer"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -63,16 +64,21 @@ func composeLogsAction(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}

client, ctx, cancel, err := clientutil.NewClient(cmd.Context(), globalOptions.Namespace, globalOptions.Address)
if err != nil {
return err
}
defer cancel()

c, err := getComposer(cmd, client, globalOptions)
options, err := getComposeOptions(cmd, globalOptions.DebugFull, globalOptions.Experimental)
if err != nil {
return err
}
c, err := compose.New(client, globalOptions, options, cmd.OutOrStdout(), cmd.ErrOrStderr())
if err != nil {
return err
}

lo := composer.LogsOptions{
Follow: follow,
Timestamps: timestamps,
Expand Down
Loading