diff --git a/pkg/tarmak/cluster/cluster.go b/pkg/tarmak/cluster/cluster.go index df9be74405..913eafe1b5 100644 --- a/pkg/tarmak/cluster/cluster.go +++ b/pkg/tarmak/cluster/cluster.go @@ -74,7 +74,7 @@ func NewFromConfig(environment interfaces.Environment, conf *clusterv1alpha1.Clu } // setup instance pools - var result error + var result *multierror.Error for pos, _ := range cluster.conf.InstancePools { instancePool := cluster.conf.InstancePools[pos] // create instance pools @@ -86,7 +86,7 @@ func NewFromConfig(environment interfaces.Environment, conf *clusterv1alpha1.Clu cluster.instancePools = append(cluster.instancePools, pool) } - return cluster, result + return cluster, result.ErrorOrNil() } func (c *Cluster) InstancePools() []interfaces.InstancePool { @@ -357,7 +357,7 @@ func (c *Cluster) verifyHubState() error { } // Verify instance pools -func (c *Cluster) VerifyInstancePools() (result error) { +func (c *Cluster) VerifyInstancePools() error { imageIDs, err := c.ImageIDs() if err != nil { return fmt.Errorf("error getting image IDs: %s]", err) @@ -370,6 +370,7 @@ func (c *Cluster) VerifyInstancePools() (result error) { return fmt.Errorf("error getting the image ID of %s", instancePool.TFName()) } } + return nil } @@ -416,7 +417,7 @@ func (c *Cluster) Validate() error { } // validate network configuration -func (c *Cluster) validateNetwork() (result error) { +func (c *Cluster) validateNetwork() error { // make the choice between deploying into existing VPC or creating a new one if _, ok := c.Config().Network.ObjectMeta.Annotations[clusterv1alpha1.ExistingVPCAnnotationKey]; ok { // TODO: handle existing vpc @@ -437,7 +438,7 @@ func (c *Cluster) validateNetwork() (result error) { } // validate logging configuration -func (c *Cluster) validateLoggingSinks() (result error) { +func (c *Cluster) validateLoggingSinks() error { if c.Config().LoggingSinks != nil { for index, loggingSink := range c.Config().LoggingSinks { @@ -459,7 +460,7 @@ func (c *Cluster) validateLoggingSinks() (result error) { } // validate overprovisioning -func (c *Cluster) validateClusterAutoscaler() (result error) { +func (c *Cluster) validateClusterAutoscaler() error { if c.Config().Kubernetes != nil && c.Config().Kubernetes.ClusterAutoscaler != nil && c.Config().Kubernetes.ClusterAutoscaler.Overprovisioning != nil { if !c.Config().Kubernetes.ClusterAutoscaler.Overprovisioning.Enabled { @@ -490,7 +491,9 @@ func (c *Cluster) validateClusterAutoscaler() (result error) { } // Validate APIServer -func (c *Cluster) validateAPIServer() (result error) { +func (c *Cluster) validateAPIServer() error { + var result *multierror.Error + for _, cidr := range c.Config().Kubernetes.APIServer.AllowCIDRs { _, _, err := net.ParseCIDR(cidr) if err != nil { @@ -498,12 +501,10 @@ func (c *Cluster) validateAPIServer() (result error) { } } - return result + return result.ErrorOrNil() } func (c *Cluster) validatePrometheusMode() error { - var result error - allowedModes := sets.NewString( clusterv1alpha1.PrometheusModeFull, clusterv1alpha1.PrometheusModeExternalScrapeTargetsOnly, @@ -517,7 +518,7 @@ func (c *Cluster) validatePrometheusMode() error { } } - return result + return nil } // Determine if this Cluster is a cluster or hub, single or multi environment diff --git a/pkg/tarmak/environment/environment.go b/pkg/tarmak/environment/environment.go index d1940dbe13..ab63c9c20b 100644 --- a/pkg/tarmak/environment/environment.go +++ b/pkg/tarmak/environment/environment.go @@ -53,9 +53,7 @@ func NewFromConfig(tarmak interfaces.Tarmak, conf *tarmakv1alpha1.Environment, c log: tarmak.Log().WithField("environment", conf.Name), } - var result error var err error - // init provider e.provider, err = tarmak.ProviderByName(conf.Provider) if err != nil { @@ -65,6 +63,7 @@ func NewFromConfig(tarmak interfaces.Tarmak, conf *tarmakv1alpha1.Environment, c // TODO RENABLE //networkCIDRs := []*net.IPNet{} + var result *multierror.Error for posCluster, _ := range clusters { clusterConf := clusters[posCluster] clusterIntf, err := cluster.NewFromConfig(e, clusterConf) @@ -72,13 +71,15 @@ func NewFromConfig(tarmak interfaces.Tarmak, conf *tarmakv1alpha1.Environment, c result = multierror.Append(result, err) continue } + e.clusters = append(e.clusters, clusterIntf) if len(clusters) == 1 || clusterConf.Name == "hub" { e.HubCluster = clusterIntf } } + if result != nil { - return nil, result + return nil, result.ErrorOrNil() } if e.HubCluster != nil { @@ -277,7 +278,8 @@ func (e *Environment) Log() *logrus.Entry { return e.log } -func (e *Environment) Validate() (result error) { +func (e *Environment) Validate() error { + var result *multierror.Error if err := e.Provider().Validate(); err != nil { result = multierror.Append(result, err) @@ -287,10 +289,12 @@ func (e *Environment) Validate() (result error) { result = multierror.Append(result, err) } - return result + return result.ErrorOrNil() } -func (e *Environment) ValidateAdminCIDRs() (result error) { +func (e *Environment) ValidateAdminCIDRs() error { + var result *multierror.Error + for _, cidr := range e.Config().AdminCIDRs { _, _, err := net.ParseCIDR(cidr) if err != nil { @@ -298,7 +302,7 @@ func (e *Environment) ValidateAdminCIDRs() (result error) { } } - return result + return result.ErrorOrNil() } func (e *Environment) Verify() error { diff --git a/pkg/tarmak/instance_pool/instance_pool.go b/pkg/tarmak/instance_pool/instance_pool.go index 5a47c547dc..b6a06d0b54 100644 --- a/pkg/tarmak/instance_pool/instance_pool.go +++ b/pkg/tarmak/instance_pool/instance_pool.go @@ -77,8 +77,7 @@ func NewFromConfig(cluster interfaces.Cluster, conf *clusterv1alpha1.InstancePoo return nil, fmt.Errorf("minCount does not equal maxCount but role is stateful. minCount=%d maxCount=%d", instancePool.Config().MinCount, instancePool.Config().MaxCount) } - var result error - + var result *multierror.Error count := 0 for pos, _ := range conf.Volumes { volume, err := NewVolumeFromConfig(count, provider, &conf.Volumes[pos]) @@ -98,7 +97,7 @@ func NewFromConfig(cluster interfaces.Cluster, conf *clusterv1alpha1.InstancePoo return nil, errors.New("no root volume given") } - return instancePool, result + return instancePool, result.ErrorOrNil() } func (n *InstancePool) Role() *role.Role { @@ -191,11 +190,13 @@ func (n *InstancePool) AmazonAdditionalIAMPolicies() string { return fmt.Sprintf("[%s]", strings.Join(policies, ",")) } -func (n *InstancePool) Validate() (result error) { +func (n *InstancePool) Validate() error { return n.ValidateAllowCIDRs() } -func (n *InstancePool) ValidateAllowCIDRs() (result error) { +func (n *InstancePool) ValidateAllowCIDRs() error { + var result *multierror.Error + for _, cidr := range n.Config().AllowCIDRs { _, _, err := net.ParseCIDR(cidr) if err != nil { @@ -203,7 +204,7 @@ func (n *InstancePool) ValidateAllowCIDRs() (result error) { } } - return result + return result.ErrorOrNil() } func (n *InstancePool) Labels() (string, error) { @@ -227,7 +228,7 @@ func (n *InstancePool) Labels() (string, error) { func (n *InstancePool) Taints() (string, error) { var taints []string - var result error + var result *multierror.Error err := n.validTaints() if err != nil { @@ -238,11 +239,11 @@ func (n *InstancePool) Taints() (string, error) { taints = append(taints, fmt.Sprintf(" %s: \"%s:%s\"", taint.Key, taint.Value, taint.Effect)) } - return strings.Join(taints, "\n"), result + return strings.Join(taints, "\n"), result.ErrorOrNil() } func (n *InstancePool) validTaints() error { - var result error + var result *multierror.Error validKey := regexp.MustCompile(`^[a-zA-Z0-9][\w_\-\.]*\/?[\w_\-\.]*[a-zA-Z0-9]$`) validValue := regexp.MustCompile(`^[a-zA-Z0-9][\w_\-\.]*[a-zA-Z0-9]$`) @@ -260,5 +261,5 @@ func (n *InstancePool) validTaints() error { } } - return result + return result.ErrorOrNil() } diff --git a/pkg/tarmak/provider/amazon/amazon.go b/pkg/tarmak/provider/amazon/amazon.go index a47d41d0c7..2dd55852b6 100644 --- a/pkg/tarmak/provider/amazon/amazon.go +++ b/pkg/tarmak/provider/amazon/amazon.go @@ -399,7 +399,7 @@ func (a *Amazon) getAvailablityZoneByRegion() (zones []string, err error) { } func (a *Amazon) validateAvailabilityZones() error { - var result error + var result *multierror.Error zones, err := a.getAvailablityZoneByRegion() if err != nil { @@ -432,7 +432,7 @@ func (a *Amazon) validateAvailabilityZones() error { } } if result != nil { - return result + return result.ErrorOrNil() } if len(availabilityZones) == 0 { @@ -522,7 +522,7 @@ func (a *Amazon) vaultSession() (*session.Session, error) { } func (a *Amazon) VerifyInstanceTypes(instancePools []interfaces.InstancePool) error { - var result error + var result *multierror.Error svc, err := a.EC2() if err != nil { @@ -540,11 +540,11 @@ func (a *Amazon) VerifyInstanceTypes(instancePools []interfaces.InstancePool) er } } - return result + return result.ErrorOrNil() } func (a *Amazon) verifyInstanceType(instanceType string, zones []string, svc EC2) error { - var result error + var result *multierror.Error var available bool //Request offering, filter by given instance type @@ -579,7 +579,7 @@ func (a *Amazon) verifyInstanceType(instanceType string, zones []string, svc EC2 } } - return result + return result.ErrorOrNil() } // This methods converts and possibly validates a generic instance type to a diff --git a/pkg/tarmak/tarmak.go b/pkg/tarmak/tarmak.go index 4ef1a0abb4..73e44900e4 100644 --- a/pkg/tarmak/tarmak.go +++ b/pkg/tarmak/tarmak.go @@ -281,20 +281,17 @@ func (t *Tarmak) Version() string { } func (t *Tarmak) Validate() error { - var err error - var result error + var result *multierror.Error - err = t.Cluster().Validate() - if err != nil { + if err := t.Cluster().Validate(); err != nil { result = multierror.Append(result, err) } - err = t.Cluster().Environment().Validate() - if err != nil { + if err := t.Cluster().Environment().Validate(); err != nil { result = multierror.Append(result, err) } - return result + return result.ErrorOrNil() } func (t *Tarmak) Verify() error { diff --git a/pkg/tarmak/utils/networks.go b/pkg/tarmak/utils/networks.go index 031e1f0193..1030a354eb 100644 --- a/pkg/tarmak/utils/networks.go +++ b/pkg/tarmak/utils/networks.go @@ -21,7 +21,7 @@ func UnusedPort() int { } func NetworkOverlap(netCIDRs []*net.IPNet) error { - var result error + var result *multierror.Error for i, _ := range netCIDRs { for j := i + 1; j < len(netCIDRs); j++ { // check for overlap per network @@ -34,5 +34,5 @@ func NetworkOverlap(netCIDRs []*net.IPNet) error { } } } - return result + return result.ErrorOrNil() } diff --git a/pkg/terraform/templating.go b/pkg/terraform/templating.go index dc999d1344..d4a08a56a8 100644 --- a/pkg/terraform/templating.go +++ b/pkg/terraform/templating.go @@ -118,7 +118,7 @@ type terraformTemplate struct { func (t *terraformTemplate) Generate() error { - var result error + var result *multierror.Error if err := t.generateRemoteStateConfig(); err != nil { result = multierror.Append(result, err) } @@ -151,7 +151,7 @@ func (t *terraformTemplate) Generate() error { result = multierror.Append(result, err) } - return result + return result.ErrorOrNil() } func (t *terraformTemplate) data(module string) map[string]interface{} {