parse --publish ports into spec

This commit is contained in:
Pavel Sviderski
2024-12-10 17:57:26 +10:00
parent deedbcb8a9
commit e8908ced9e
4 changed files with 25 additions and 8 deletions
+20 -6
View File
@@ -74,20 +74,34 @@ func run(ctx context.Context, uncli *cli.CLI, opts runOptions) error {
return fmt.Errorf("invalid replication mode: %q", opts.mode)
}
client, err := uncli.ConnectCluster(ctx, opts.cluster)
if err != nil {
return fmt.Errorf("connect to cluster: %w", err)
ports := make([]api.PortSpec, len(opts.publish))
for i, publishPort := range opts.publish {
port, err := api.ParsePortSpec(publishPort)
if err != nil {
return fmt.Errorf("invalid service port '%s': %w", publishPort, err)
}
ports[i] = port
}
defer client.Close()
spec := api.ServiceSpec{
Container: api.ContainerSpec{
Command: opts.command,
Image: opts.image,
},
Mode: opts.mode,
Name: opts.name,
Mode: opts.mode,
Name: opts.name,
Ports: ports,
}
if err := spec.Validate(); err != nil {
return fmt.Errorf("invalid service configuration: %w", err)
}
client, err := uncli.ConnectCluster(ctx, opts.cluster)
if err != nil {
return fmt.Errorf("connect to cluster: %w", err)
}
defer client.Close()
if _, err = client.RunService(ctx, spec); err != nil {
return fmt.Errorf("run service: %w", err)
}
+2 -1
View File
@@ -41,7 +41,8 @@ func (p *PortSpec) Validate() error {
switch p.Protocol {
case ProtocolHTTP, ProtocolHTTPS, ProtocolTCP, ProtocolUDP:
default:
return fmt.Errorf("invalid protocol: '%s'", p.Protocol)
return fmt.Errorf("invalid protocol '%s', supported protocols: '%s', '%s', '%s', '%s'",
p.Protocol, ProtocolHTTP, ProtocolHTTPS, ProtocolTCP, ProtocolUDP)
}
switch p.Mode {
+2
View File
@@ -32,6 +32,8 @@ func (s *ServiceSpec) Validate() error {
return fmt.Errorf("invalid mode: %q", s.Mode)
}
// TODO: validate there is no conflict between ports.
return nil
}
+1 -1
View File
@@ -430,7 +430,7 @@ func TestPortSpec_Validate(t *testing.T) {
ContainerPort: 8080,
Protocol: "invalid",
},
wantErr: "invalid protocol: 'invalid'",
wantErr: "invalid protocol 'invalid'",
},
{
name: "invalid mode",