From a3b3132a8f57bb125798699507dc8e9423c17f8a Mon Sep 17 00:00:00 2001 From: angiecris Date: Tue, 17 Oct 2017 14:25:48 -0700 Subject: [PATCH 1/7] syslog support added to VCH create API --- cmd/vic-machine/create/create.go | 12 ++-- .../service/restapi/handlers/vch_create.go | 64 +++++++++++-------- lib/apiservers/service/swagger.json | 3 + 3 files changed, 45 insertions(+), 34 deletions(-) diff --git a/cmd/vic-machine/create/create.go b/cmd/vic-machine/create/create.go index df74256a86..c75fd23830 100644 --- a/cmd/vic-machine/create/create.go +++ b/cmd/vic-machine/create/create.go @@ -79,7 +79,7 @@ type Create struct { Proxies common.Proxies - syslogAddr string + SyslogAddr string executor *management.Dispatcher } @@ -271,7 +271,7 @@ func (c *Create) Flags() []cli.Flag { Name: "syslog-address", Value: "", Usage: "Address of the syslog server to send Virtual Container Host logs to. Must be in the format transport://host[:port], where transport is udp or tcp. port defaults to 514 if not specified", - Destination: &c.syslogAddr, + Destination: &c.SyslogAddr, Hidden: true, }, } @@ -416,7 +416,7 @@ func (c *Create) processParams() error { c.HTTPProxy = hproxy c.HTTPSProxy = sproxy - if err := c.processSyslog(); err != nil { + if err := c.ProcessSyslog(); err != nil { return err } @@ -543,12 +543,12 @@ func (c *Create) ProcessNetwork(network *data.NetworkConfig, netName, pgName, st return nil } -func (c *Create) processSyslog() error { - if len(c.syslogAddr) == 0 { +func (c *Create) ProcessSyslog() error { + if len(c.SyslogAddr) == 0 { return nil } - u, err := url.Parse(c.syslogAddr) + u, err := url.Parse(c.SyslogAddr) if err != nil { return err } diff --git a/lib/apiservers/service/restapi/handlers/vch_create.go b/lib/apiservers/service/restapi/handlers/vch_create.go index 66b5e691b8..66fbdca28f 100644 --- a/lib/apiservers/service/restapi/handlers/vch_create.go +++ b/lib/apiservers/service/restapi/handlers/vch_create.go @@ -20,6 +20,7 @@ import ( "io" "math" "net" + "net/http" "net/url" "os" "path" @@ -79,7 +80,7 @@ func (h *VCHCreate) Handle(params operations.PostTargetTargetVchParams, principa validator, err := validateTarget(params.HTTPRequest.Context(), d) if err != nil { - return operations.NewPostTargetTargetVchDefault(400).WithPayload(&models.Error{Message: err.Error()}) + return operations.NewPostTargetTargetVchDefault(http.StatusBadRequest).WithPayload(&models.Error{Message: err.Error()}) } c, err := buildCreate(params.HTTPRequest.Context(), d, validator.Session.Finder, params.Vch) @@ -115,7 +116,7 @@ func (h *VCHDatacenterCreate) Handle(params operations.PostTargetTargetDatacente validator, err := validateTarget(params.HTTPRequest.Context(), d) if err != nil { - return operations.NewPostTargetTargetDatacenterDatacenterVchDefault(400).WithPayload(&models.Error{Message: err.Error()}) + return operations.NewPostTargetTargetDatacenterDatacenterVchDefault(http.StatusBadRequest).WithPayload(&models.Error{Message: err.Error()}) } c, err := buildCreate(params.HTTPRequest.Context(), d, validator.Session.Finder, params.Vch) @@ -164,17 +165,17 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo if vch != nil { if vch.Version != "" && version.String() != string(vch.Version) { - return nil, util.NewError(400, fmt.Sprintf("Invalid version: %s", vch.Version)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Invalid version: %s", vch.Version)) } c.DisplayName = vch.Name // TODO: move validation to swagger if err := common.CheckUnsupportedChars(c.DisplayName); err != nil { - return nil, util.NewError(400, fmt.Sprintf("Invalid display name: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Invalid display name: %s", err)) } if len(c.DisplayName) > create.MaxDisplayNameLen { - return nil, util.NewError(400, fmt.Sprintf("Invalid display name: length exceeds %d characters", create.MaxDisplayNameLen)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Invalid display name: length exceeds %d characters", create.MaxDisplayNameLen)) } debug := int(vch.Debug) @@ -195,10 +196,10 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo resourcePath, err := fromManagedObject(ctx, finder, "ResourcePool", vch.Compute.Resource) // TODO: Do we need to handle clusters differently? if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding resource pool: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding resource pool: %s", err)) } if resourcePath == "" { - return nil, util.NewError(400, "Resource pool must be specified (by name or id)") + return nil, util.NewError(http.StatusBadRequest, "Resource pool must be specified (by name or id)") } c.ComputeResourcePath = resourcePath } @@ -207,67 +208,67 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo if vch.Network.Bridge != nil { path, err := fromManagedObject(ctx, finder, "Network", vch.Network.Bridge.PortGroup) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding bridge network: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding bridge network: %s", err)) } if path == "" { - return nil, util.NewError(400, "Bridge network portgroup must be specified (by name or id)") + return nil, util.NewError(http.StatusBadRequest, "Bridge network portgroup must be specified (by name or id)") } c.BridgeNetworkName = path c.BridgeIPRange = fromCIDR(&vch.Network.Bridge.IPRange.CIDR) if err := c.ProcessBridgeNetwork(); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } } if vch.Network.Client != nil { path, err := fromManagedObject(ctx, finder, "Network", vch.Network.Client.PortGroup) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding client network portgroup: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding client network portgroup: %s", err)) } if path == "" { - return nil, util.NewError(400, "Client network portgroup must be specified (by name or id)") + return nil, util.NewError(http.StatusBadRequest, "Client network portgroup must be specified (by name or id)") } c.ClientNetworkName = path c.ClientNetworkGateway = fromGateway(vch.Network.Client.Gateway) c.ClientNetworkIP = fromNetworkAddress(vch.Network.Client.Static) if err := c.ProcessNetwork(&c.Data.ClientNetwork, "client", c.ClientNetworkName, c.ClientNetworkIP, c.ClientNetworkGateway); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } } if vch.Network.Management != nil { path, err := fromManagedObject(ctx, finder, "Network", vch.Network.Management.PortGroup) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding management network portgroup: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding management network portgroup: %s", err)) } if path == "" { - return nil, util.NewError(400, "Management network portgroup must be specified (by name or id)") + return nil, util.NewError(http.StatusBadRequest, "Management network portgroup must be specified (by name or id)") } c.ManagementNetworkName = path c.ManagementNetworkGateway = fromGateway(vch.Network.Management.Gateway) c.ManagementNetworkIP = fromNetworkAddress(vch.Network.Management.Static) if err := c.ProcessNetwork(&c.Data.ManagementNetwork, "management", c.ManagementNetworkName, c.ManagementNetworkIP, c.ManagementNetworkGateway); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } } if vch.Network.Public != nil { path, err := fromManagedObject(ctx, finder, "Network", vch.Network.Public.PortGroup) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding public network portgroup: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding public network portgroup: %s", err)) } if path == "" { - return nil, util.NewError(400, "Public network portgroup must be specified (by name or id)") + return nil, util.NewError(http.StatusBadRequest, "Public network portgroup must be specified (by name or id)") } c.PublicNetworkName = path c.PublicNetworkGateway = fromGateway(vch.Network.Public.Gateway) c.PublicNetworkIP = fromNetworkAddress(vch.Network.Public.Static) if err := c.ProcessNetwork(&c.Data.PublicNetwork, "public", c.PublicNetworkName, c.PublicNetworkIP, c.PublicNetworkGateway); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } } @@ -284,17 +285,17 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo path, err := fromManagedObject(ctx, finder, "Network", cnetwork.PortGroup) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error finding portgroup for container network %s: %s", alias, err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error finding portgroup for container network %s: %s", alias, err)) } if path == "" { - return nil, util.NewError(400, fmt.Sprintf("Container network %s portgroup must be specified (by name or id)", alias)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Container network %s portgroup must be specified (by name or id)", alias)) } containerNetworks.MappedNetworks[alias] = path address := net.ParseIP(string(cnetwork.Gateway.Address)) _, mask, err := net.ParseCIDR(string(cnetwork.Gateway.RoutingDestinations[0].CIDR)) if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error parsing network mask for container network %s: %s", alias, err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error parsing network mask for container network %s: %s", alias, err)) } containerNetworks.MappedNetworksGateways[alias] = net.IPNet{ IP: address, @@ -327,7 +328,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo } if err := common.CheckUnsupportedCharsDatastore(c.ImageDatastorePath); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } if vch.Storage.VolumeStores != nil { @@ -339,7 +340,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo vs := common.VolumeStores{VolumeStores: cli.StringSlice(volumes)} volumeLocations, err := vs.ProcessVolumeStores() if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error processing volume stores: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing volume stores: %s", err)) } c.VolumeLocations = volumeLocations } @@ -367,7 +368,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo c.Certs.KeySize = fromValueBits(vch.Auth.Server.Generate.Size) if err := c.Certs.ProcessCertificates(c.DisplayName, c.Force, 0); err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error generating certificates: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error generating certificates: %s", err)) } } else { c.Certs.CertPEM = []byte(vch.Auth.Server.Certificate.Pem) @@ -397,7 +398,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo } } if err := c.OpsCredentials.ProcessOpsCredentials(true, c.Target.User, c.Target.Password); err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } } @@ -413,10 +414,17 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo c.Proxies = fromImageFetchProxy(vch.Registry.ImageFetchProxy) _, _, err := c.Proxies.ProcessProxies() if err != nil { - return nil, util.NewError(400, fmt.Sprintf("Error processing proxies: %s", err)) + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing proxies: %s", err)) } } } + + if len(vch.SyslogAddr) > 0 { + c.SyslogAddr = vch.SyslogAddr + if err := c.ProcessSyslog(); err != nil { + return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing syslog server address: %s", err)) + } + } } return c, nil @@ -435,7 +443,7 @@ func handleCreate(ctx context.Context, c *create.Create, validator *validate.Val executor := management.NewDispatcher(validator.Context, validator.Session, nil, false) err = executor.CreateVCH(vchConfig, vConfig) if err != nil { - return nil, util.NewError(500, fmt.Sprintf("Failed to create VCH: %s", err)) + return nil, util.NewError(http.StatusInternalServerError, fmt.Sprintf("Failed to create VCH: %s", err)) } return nil, nil diff --git a/lib/apiservers/service/swagger.json b/lib/apiservers/service/swagger.json index 30ca20cb74..be949b9287 100644 --- a/lib/apiservers/service/swagger.json +++ b/lib/apiservers/service/swagger.json @@ -798,6 +798,9 @@ "type": "string" } } + }, + "syslog_addr": { + "type": "string" } } }, From e5188936def526ea0eb4a3aa2156982c915dc7ad Mon Sep 17 00:00:00 2001 From: angiecris Date: Wed, 18 Oct 2017 11:54:04 -0700 Subject: [PATCH 2/7] syslog addr added to inspect output --- lib/apiservers/service/restapi/handlers/vch_get.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/apiservers/service/restapi/handlers/vch_get.go b/lib/apiservers/service/restapi/handlers/vch_get.go index ddd6579bd0..ba84cb22f1 100644 --- a/lib/apiservers/service/restapi/handlers/vch_get.go +++ b/lib/apiservers/service/restapi/handlers/vch_get.go @@ -20,6 +20,7 @@ import ( "encoding/pem" "fmt" "net" + "net/http" "net/url" "strings" @@ -98,23 +99,23 @@ func (h *VCHDatacenterGet) Handle(params operations.GetTargetTargetDatacenterDat func getVCH(ctx context.Context, d *data.Data) (*models.VCH, error) { validator, err := validateTarget(ctx, d) if err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } executor := management.NewDispatcher(validator.Context, validator.Session, nil, false) vch, err := executor.NewVCHFromID(d.ID) if err != nil { - return nil, util.NewError(500, fmt.Sprintf("Failed to inspect VCH: %s", err)) + return nil, util.NewError(http.StatusInternalServerError, fmt.Sprintf("Failed to inspect VCH: %s", err)) } err = validate.SetDataFromVM(validator.Context, validator.Session.Finder, vch, d) if err != nil { - return nil, util.NewError(500, fmt.Sprintf("Failed to load VCH data: %s", err)) + return nil, util.NewError(http.StatusInternalServerError, fmt.Sprintf("Failed to load VCH data: %s", err)) } model, err := vchToModel(vch, d, executor) if err != nil { - return nil, util.WrapError(500, err) + return nil, util.WrapError(http.StatusInternalServerError, err) } return model, nil @@ -260,6 +261,11 @@ func vchToModel(vch *vm.VirtualMachine, d *data.Data, executor *management.Dispa } } + // syslog_addr: syslog server address + if syslogConfig := vchConfig.Diagnostics.SysLogConfig; syslogConfig != nil { + model.SyslogAddr = syslogConfig.Network + "://" + syslogConfig.RAddr + } + return model, nil } From dd03e5b8cd70878a47cd91ad1a2b34897036e01b Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 19 Oct 2017 08:14:13 -0700 Subject: [PATCH 3/7] syslog_addr format changed in swagger --- lib/apiservers/service/restapi/handlers/vch_create.go | 2 +- lib/apiservers/service/restapi/handlers/vch_get.go | 2 +- lib/apiservers/service/swagger.json | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/apiservers/service/restapi/handlers/vch_create.go b/lib/apiservers/service/restapi/handlers/vch_create.go index 66fbdca28f..de3aed03c6 100644 --- a/lib/apiservers/service/restapi/handlers/vch_create.go +++ b/lib/apiservers/service/restapi/handlers/vch_create.go @@ -420,7 +420,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo } if len(vch.SyslogAddr) > 0 { - c.SyslogAddr = vch.SyslogAddr + c.SyslogAddr = vch.SyslogAddr.String() if err := c.ProcessSyslog(); err != nil { return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing syslog server address: %s", err)) } diff --git a/lib/apiservers/service/restapi/handlers/vch_get.go b/lib/apiservers/service/restapi/handlers/vch_get.go index ba84cb22f1..7644c96e1c 100644 --- a/lib/apiservers/service/restapi/handlers/vch_get.go +++ b/lib/apiservers/service/restapi/handlers/vch_get.go @@ -263,7 +263,7 @@ func vchToModel(vch *vm.VirtualMachine, d *data.Data, executor *management.Dispa // syslog_addr: syslog server address if syslogConfig := vchConfig.Diagnostics.SysLogConfig; syslogConfig != nil { - model.SyslogAddr = syslogConfig.Network + "://" + syslogConfig.RAddr + model.SyslogAddr = strfmt.URI(syslogConfig.Network + "://" + syslogConfig.RAddr) } return model, nil diff --git a/lib/apiservers/service/swagger.json b/lib/apiservers/service/swagger.json index be949b9287..86c9cd3f20 100644 --- a/lib/apiservers/service/swagger.json +++ b/lib/apiservers/service/swagger.json @@ -800,7 +800,9 @@ } }, "syslog_addr": { - "type": "string" + "type": "string", + "format": "uri", + "pattern": "^(tc|ud)p.*" } } }, From 17e3514f275e1a0978f3b38569e12dfbe04f8c73 Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 19 Oct 2017 11:35:28 -0700 Subject: [PATCH 4/7] use status code in http package --- lib/apiservers/service/restapi/handlers/vch_cert_get.go | 2 +- lib/apiservers/service/restapi/handlers/vch_list_get.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/apiservers/service/restapi/handlers/vch_cert_get.go b/lib/apiservers/service/restapi/handlers/vch_cert_get.go index 69674633b6..9ab60be286 100644 --- a/lib/apiservers/service/restapi/handlers/vch_cert_get.go +++ b/lib/apiservers/service/restapi/handlers/vch_cert_get.go @@ -93,7 +93,7 @@ func getVCHCert(op trace.Operation, d *data.Data) (*config.RawCertificate, error } if vchConfig.HostCertificate.IsNil() { - return nil, util.NewError(404, fmt.Sprintf("No certificate found for VCH %s", d.ID)) + return nil, util.NewError(http.StatusNotFound, fmt.Sprintf("No certificate found for VCH %s", d.ID)) } return vchConfig.HostCertificate, nil diff --git a/lib/apiservers/service/restapi/handlers/vch_list_get.go b/lib/apiservers/service/restapi/handlers/vch_list_get.go index f31e7e7bf4..36720fae3c 100644 --- a/lib/apiservers/service/restapi/handlers/vch_list_get.go +++ b/lib/apiservers/service/restapi/handlers/vch_list_get.go @@ -30,6 +30,7 @@ import ( "github.com/vmware/vic/lib/install/management" "github.com/vmware/vic/pkg/version" "github.com/vmware/vic/pkg/vsphere/vm" + "net/http" ) // VCHListGet is the handler for listing VCHs @@ -83,13 +84,13 @@ func (h *VCHDatacenterListGet) Handle(params operations.GetTargetTargetDatacente func listVCHs(ctx context.Context, d *data.Data) ([]*models.VCHListItem, error) { validator, err := validateTarget(ctx, d) if err != nil { - return nil, util.WrapError(400, err) + return nil, util.WrapError(http.StatusBadRequest, err) } executor := management.NewDispatcher(validator.Context, validator.Session, nil, false) vchs, err := executor.SearchVCHs(validator.ClusterPath) if err != nil { - return nil, util.NewError(500, fmt.Sprintf("Failed to search VCHs in %s: %s", validator.ResourcePoolPath, err)) + return nil, util.NewError(http.StatusInternalServerError, fmt.Sprintf("Failed to search VCHs in %s: %s", validator.ResourcePoolPath, err)) } return vchsToModels(ctx, vchs, executor), nil From 77eee589a36ae439b76d0c51727cf9dabfcab740 Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 19 Oct 2017 11:42:28 -0700 Subject: [PATCH 5/7] empty syslog_addr string checking --- lib/apiservers/service/restapi/handlers/vch_create.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/apiservers/service/restapi/handlers/vch_create.go b/lib/apiservers/service/restapi/handlers/vch_create.go index de3aed03c6..03370ffda7 100644 --- a/lib/apiservers/service/restapi/handlers/vch_create.go +++ b/lib/apiservers/service/restapi/handlers/vch_create.go @@ -419,7 +419,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo } } - if len(vch.SyslogAddr) > 0 { + if vch.SyslogAddr.String() != ""{ c.SyslogAddr = vch.SyslogAddr.String() if err := c.ProcessSyslog(); err != nil { return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing syslog server address: %s", err)) From 16c412ca4bd1494fc1ae50b8da91bb279a0ff018 Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 19 Oct 2017 11:56:22 -0700 Subject: [PATCH 6/7] swagger format changed for syslog_addr --- lib/apiservers/service/restapi/handlers/vch_create.go | 2 +- lib/apiservers/service/restapi/handlers/vch_list_get.go | 2 +- lib/apiservers/service/swagger.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/apiservers/service/restapi/handlers/vch_create.go b/lib/apiservers/service/restapi/handlers/vch_create.go index 03370ffda7..7c87773546 100644 --- a/lib/apiservers/service/restapi/handlers/vch_create.go +++ b/lib/apiservers/service/restapi/handlers/vch_create.go @@ -419,7 +419,7 @@ func buildCreate(ctx context.Context, d *data.Data, finder *find.Finder, vch *mo } } - if vch.SyslogAddr.String() != ""{ + if vch.SyslogAddr != "" { c.SyslogAddr = vch.SyslogAddr.String() if err := c.ProcessSyslog(); err != nil { return nil, util.NewError(http.StatusBadRequest, fmt.Sprintf("Error processing syslog server address: %s", err)) diff --git a/lib/apiservers/service/restapi/handlers/vch_list_get.go b/lib/apiservers/service/restapi/handlers/vch_list_get.go index 36720fae3c..b25327cfef 100644 --- a/lib/apiservers/service/restapi/handlers/vch_list_get.go +++ b/lib/apiservers/service/restapi/handlers/vch_list_get.go @@ -17,6 +17,7 @@ package handlers import ( "context" "fmt" + "net/http" "net/url" "path" @@ -30,7 +31,6 @@ import ( "github.com/vmware/vic/lib/install/management" "github.com/vmware/vic/pkg/version" "github.com/vmware/vic/pkg/vsphere/vm" - "net/http" ) // VCHListGet is the handler for listing VCHs diff --git a/lib/apiservers/service/swagger.json b/lib/apiservers/service/swagger.json index 86c9cd3f20..4f48d93779 100644 --- a/lib/apiservers/service/swagger.json +++ b/lib/apiservers/service/swagger.json @@ -802,7 +802,7 @@ "syslog_addr": { "type": "string", "format": "uri", - "pattern": "^(tc|ud)p.*" + "pattern": "^((tc|ud)p)|((tc|ud)p6).*" } } }, From 56fb57a9a3393461d1c654f504bf406fc8e9733c Mon Sep 17 00:00:00 2001 From: angiecris Date: Fri, 20 Oct 2017 09:02:26 -0700 Subject: [PATCH 7/7] roll back in swagger: only tcp and udp are accepted --- lib/apiservers/service/swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/apiservers/service/swagger.json b/lib/apiservers/service/swagger.json index 4f48d93779..d6b8e2d7df 100644 --- a/lib/apiservers/service/swagger.json +++ b/lib/apiservers/service/swagger.json @@ -802,7 +802,7 @@ "syslog_addr": { "type": "string", "format": "uri", - "pattern": "^((tc|ud)p)|((tc|ud)p6).*" + "pattern": "^(tc|ud)p:\/\/.*" } } },