Skip to content

Commit

Permalink
* check for cloud provider to initialize
Browse files Browse the repository at this point in the history
* do not validate openstack fields for other cloud providers
  • Loading branch information
furkhat committed Feb 5, 2021
1 parent f473e25 commit 29a4591
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 12 deletions.
22 changes: 22 additions & 0 deletions metakube/resource_node_deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,28 @@ func resourceNodeDeploymentCreate(ctx context.Context, d *schema.ResourceData, m
return diag.Errorf("cluster is not ready: %v", err)
}

// Some cloud providers, like AWS, take some time to finish initializing.
err = resource.RetryContext(ctx, d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
p := project.NewListNodeDeploymentsParams()
p.SetContext(ctx)
p.SetProjectID(projectID)
p.SetClusterID(clusterID)
p.SetDC(seedDC)

_, err := k.client.Project.ListNodeDeployments(p, k.auth)
if err != nil {
if e, ok := err.(*project.ListNodeDeploymentsDefault); ok && e.Code() != http.StatusOK {
return resource.RetryableError(fmt.Errorf("unable to list node deployments %v", err))
}
return resource.NonRetryableError(err)
}

return nil
})
if err != nil {
return diag.Errorf("nodedeployments API is not ready: %v", err)
}

r, err := k.client.Project.CreateNodeDeployment(p, k.auth)
if err != nil {
return diag.Errorf("unable to create a node deployment: %v", getErrorResponse(err))
Expand Down
4 changes: 2 additions & 2 deletions metakube/resource_node_deployment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,15 +336,15 @@ func TestAccMetaKubeNodeDeployment_AWS_Basic(t *testing.T) {
subnetID := os.Getenv(testEnvAWSSubnetID)
availabilityZone := os.Getenv(testEnvAWSAvailabilityZone)
diskSize := os.Getenv(testEnvAWSDiskSize)
k8sVersion17 := os.Getenv(testEnvK8sVersion)
k8sVersion := os.Getenv(testEnvK8sVersion)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheckForAWS(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckMetaKubeNodeDeploymentDestroy,
Steps: []resource.TestStep{
{
Config: testAccCheckMetaKubeNodeDeploymentAWSBasic(testName, accessKeyID, accessKeySecret, vpcID, nodeDC, instanceType, subnetID, availabilityZone, diskSize, k8sVersion17, k8sVersion17),
Config: testAccCheckMetaKubeNodeDeploymentAWSBasic(testName, accessKeyID, accessKeySecret, vpcID, nodeDC, instanceType, subnetID, availabilityZone, diskSize, k8sVersion, k8sVersion),
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckMetaKubeNodeDeploymentExists("metakube_node_deployment.acctest_nd", &nodedepl),
resource.TestCheckResourceAttr("metakube_node_deployment.acctest_nd", "spec.0.template.0.cloud.0.aws.0.instance_type", instanceType),
Expand Down
23 changes: 13 additions & 10 deletions metakube/validation_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ func toStrPtrOrNil(v interface{}) *string {

func validateClusterFields(ctx context.Context, d *schema.ResourceData, k *metakubeProviderMeta) diag.Diagnostics {
ret := validateVersionExists(ctx, d, k)
if _, ok := d.GetOk("spec.0.cloud.0.openstack.0"); !ok {
return ret
}
ret = append(ret, diagnoseOpenstackFloatingIPPoolIfSet(ctx, d, k)...)
ret = append(ret, diagnoseOpenstackNetworkExistsIfSet(ctx, d, k)...)
return append(ret, diagnoseOpenstackSubnetWithIDExistsIfSet(ctx, d, k)...)
Expand Down Expand Up @@ -93,17 +96,17 @@ func validateVersionExists(ctx context.Context, d *schema.ResourceData, k *metak

func diagnoseOpenstackFloatingIPPoolIfSet(ctx context.Context, d *schema.ResourceData, k *metakubeProviderMeta) diag.Diagnostics {
nets, err := validateOpenstackNetworkExistsIfSet(ctx, d, k, "spec.0.cloud.0.openstack.0.floating_ip_pool", true)
names := make([]string, 0)
for _, n := range nets {
if n.External {
names = append(names, n.Name)
}
}
var diagnoseDetail string
if len(names) > 0 {
diagnoseDetail = fmt.Sprintf("We found following floating IP pools: %v", names)
}
if err != nil {
var diagnoseDetail string
if len(nets) > 0 {
names := make([]string, 0)
for _, n := range nets {
if n.External {
names = append(names, n.Name)
}
}
diagnoseDetail = fmt.Sprintf("We found following floating IP pools: %v", names)
}
return diag.Diagnostics{{
Severity: diag.Error,
Summary: err.Error(),
Expand Down

0 comments on commit 29a4591

Please sign in to comment.