opts: move swarm-specific options to a separate package
This prevents users of the CLI that don't implement swarm-related features from depending on the swarm API types. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
4c882e0f6c
commit
ad21055bac
@ -4,12 +4,11 @@ import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/cli/opts/swarmopts"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/swarm"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
|
||||
cliopts "github.com/docker/cli/opts"
|
||||
)
|
||||
|
||||
// fakeConfigAPIClientList is used to let us pass a closure as a
|
||||
@ -43,8 +42,8 @@ func (fakeConfigAPIClientList) ConfigUpdate(_ context.Context, _ string, _ swarm
|
||||
func TestSetConfigsWithCredSpecAndConfigs(t *testing.T) {
|
||||
// we can't directly access the internal fields of the ConfigOpt struct, so
|
||||
// we need to let it do the parsing
|
||||
configOpt := &cliopts.ConfigOpt{}
|
||||
configOpt.Set("bar")
|
||||
configOpt := &swarmopts.ConfigOpt{}
|
||||
assert.Check(t, configOpt.Set("bar"))
|
||||
opts := &serviceOptions{
|
||||
credentialSpec: credentialSpecOpt{
|
||||
value: &swarm.CredentialSpec{
|
||||
@ -187,8 +186,8 @@ func TestSetConfigsOnlyCredSpec(t *testing.T) {
|
||||
// TestSetConfigsOnlyConfigs verifies setConfigs when only configs (and not a
|
||||
// CredentialSpec) is needed.
|
||||
func TestSetConfigsOnlyConfigs(t *testing.T) {
|
||||
configOpt := &cliopts.ConfigOpt{}
|
||||
configOpt.Set("bar")
|
||||
configOpt := &swarmopts.ConfigOpt{}
|
||||
assert.Check(t, configOpt.Set("bar"))
|
||||
opts := &serviceOptions{
|
||||
configs: *configOpt,
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
|
||||
"github.com/docker/cli/cli/command"
|
||||
"github.com/docker/cli/opts"
|
||||
"github.com/docker/cli/opts/swarmopts"
|
||||
"github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/docker/api/types/network"
|
||||
"github.com/docker/docker/api/types/swarm"
|
||||
@ -395,7 +396,7 @@ func convertNetworks(networks opts.NetworkOpt) []swarm.NetworkAttachmentConfig {
|
||||
|
||||
type endpointOptions struct {
|
||||
mode string
|
||||
publishPorts opts.PortOpt
|
||||
publishPorts swarmopts.PortOpt
|
||||
}
|
||||
|
||||
func (e *endpointOptions) ToEndpointSpec() *swarm.EndpointSpec {
|
||||
@ -553,8 +554,8 @@ type serviceOptions struct {
|
||||
logDriver logDriverOptions
|
||||
|
||||
healthcheck healthCheckOptions
|
||||
secrets opts.SecretOpt
|
||||
configs opts.ConfigOpt
|
||||
secrets swarmopts.SecretOpt
|
||||
configs swarmopts.ConfigOpt
|
||||
|
||||
isolation string
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
"github.com/docker/cli/cli/command"
|
||||
"github.com/docker/cli/cli/command/completion"
|
||||
"github.com/docker/cli/opts"
|
||||
"github.com/docker/cli/opts/swarmopts"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/container"
|
||||
mounttypes "github.com/docker/docker/api/types/mount"
|
||||
@ -55,7 +56,7 @@ func newUpdateCommand(dockerCLI command.Cli) *cobra.Command {
|
||||
flags.Var(newListOptsVar(), flagContainerLabelRemove, "Remove a container label by its key")
|
||||
flags.Var(newListOptsVar(), flagMountRemove, "Remove a mount by its target path")
|
||||
// flags.Var(newListOptsVar().WithValidator(validatePublishRemove), flagPublishRemove, "Remove a published port by its target port")
|
||||
flags.Var(&opts.PortOpt{}, flagPublishRemove, "Remove a published port by its target port")
|
||||
flags.Var(&swarmopts.PortOpt{}, flagPublishRemove, "Remove a published port by its target port")
|
||||
flags.Var(newListOptsVar(), flagConstraintRemove, "Remove a constraint")
|
||||
flags.Var(newListOptsVar(), flagDNSRemove, "Remove a custom DNS server")
|
||||
flags.SetAnnotation(flagDNSRemove, "version", []string{"1.25"})
|
||||
@ -804,7 +805,7 @@ func getUpdatedSecrets(ctx context.Context, apiClient client.SecretAPIClient, fl
|
||||
}
|
||||
|
||||
if flags.Changed(flagSecretAdd) {
|
||||
values := flags.Lookup(flagSecretAdd).Value.(*opts.SecretOpt).Value()
|
||||
values := flags.Lookup(flagSecretAdd).Value.(*swarmopts.SecretOpt).Value()
|
||||
|
||||
addSecrets, err := ParseSecrets(ctx, apiClient, values)
|
||||
if err != nil {
|
||||
@ -852,7 +853,7 @@ func getUpdatedConfigs(ctx context.Context, apiClient client.ConfigAPIClient, fl
|
||||
resolveConfigs := []*swarm.ConfigReference{}
|
||||
|
||||
if flags.Changed(flagConfigAdd) {
|
||||
resolveConfigs = append(resolveConfigs, flags.Lookup(flagConfigAdd).Value.(*opts.ConfigOpt).Value()...)
|
||||
resolveConfigs = append(resolveConfigs, flags.Lookup(flagConfigAdd).Value.(*swarmopts.ConfigOpt).Value()...)
|
||||
}
|
||||
|
||||
// if credSpecConfigNameis non-empty at this point, it means its a new
|
||||
@ -1091,7 +1092,7 @@ func updatePorts(flags *pflag.FlagSet, portConfig *[]swarm.PortConfig) error {
|
||||
newPorts := []swarm.PortConfig{}
|
||||
|
||||
// Clean current ports
|
||||
toRemove := flags.Lookup(flagPublishRemove).Value.(*opts.PortOpt).Value()
|
||||
toRemove := flags.Lookup(flagPublishRemove).Value.(*swarmopts.PortOpt).Value()
|
||||
portLoop:
|
||||
for _, port := range portSet {
|
||||
for _, pConfig := range toRemove {
|
||||
@ -1107,7 +1108,7 @@ portLoop:
|
||||
|
||||
// Check to see if there are any conflict in flags.
|
||||
if flags.Changed(flagPublishAdd) {
|
||||
ports := flags.Lookup(flagPublishAdd).Value.(*opts.PortOpt).Value()
|
||||
ports := flags.Lookup(flagPublishAdd).Value.(*swarmopts.PortOpt).Value()
|
||||
|
||||
for _, port := range ports {
|
||||
if _, ok := portSet[portConfigToString(&port)]; ok {
|
||||
|
@ -18,6 +18,7 @@ import (
|
||||
"github.com/docker/cli/cli/compose/template"
|
||||
"github.com/docker/cli/cli/compose/types"
|
||||
"github.com/docker/cli/opts"
|
||||
"github.com/docker/cli/opts/swarmopts"
|
||||
"github.com/docker/docker/api/types/versions"
|
||||
"github.com/docker/go-connections/nat"
|
||||
units "github.com/docker/go-units"
|
||||
@ -925,7 +926,7 @@ func toServicePortConfigs(value string) ([]any, error) {
|
||||
|
||||
for _, key := range keys {
|
||||
// Reuse ConvertPortToPortConfig so that it is consistent
|
||||
portConfig, err := opts.ConvertPortToPortConfig(nat.Port(key), portBindings)
|
||||
portConfig, err := swarmopts.ConvertPortToPortConfig(nat.Port(key), portBindings)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
18
opts/opts_deprecated.go
Normal file
18
opts/opts_deprecated.go
Normal file
@ -0,0 +1,18 @@
|
||||
package opts
|
||||
|
||||
import "github.com/docker/cli/opts/swarmopts"
|
||||
|
||||
// PortOpt represents a port config in swarm mode.
|
||||
//
|
||||
// Deprecated: use [swarmopts.PortOpt]
|
||||
type PortOpt = swarmopts.PortOpt
|
||||
|
||||
// ConfigOpt is a Value type for parsing configs.
|
||||
//
|
||||
// Deprecated: use [swarmopts.ConfigOpt]
|
||||
type ConfigOpt = swarmopts.ConfigOpt
|
||||
|
||||
// SecretOpt is a Value type for parsing secrets
|
||||
//
|
||||
// Deprecated: use [swarmopts.SecretOpt]
|
||||
type SecretOpt = swarmopts.SecretOpt
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"os"
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"bytes"
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
@ -1,4 +1,4 @@
|
||||
package opts
|
||||
package swarmopts
|
||||
|
||||
import (
|
||||
"os"
|
Loading…
x
Reference in New Issue
Block a user