apache / apache/cloudstack-terraform-provider

Add import support to cloudstack_domain (requires implementing the currently no-op Read)

Open
#304 0 comments 0 reactions 0 assignees View on GitHub
improvement
Dominant language
Go
Stars
53
Forks
67
Avg merge
3d 14h
Merged PRs (30d)
15

Description

### Summary

`cloudstack_domain` (cloudstack/resource_cloudstack_domain.go) currently declares no
`Importer`, so pre-existing domains cannot be brought under Terraform management. Since the
domain tree is typically created long before Terraform adoption, import support is essential
for brownfield adoption and for codifying an existing CloudStack environment.

### Current state

Two things block import today:

1. The resource schema declares no `schema.ResourceImporter`.
2. `resourceCloudStackDomainRead` is a stub that makes no API call:

func resourceCloudStackDomainRead(d *schema.ResourceData, meta interface{}) error {
return nil
}

Adding an importer alone would therefore import an empty state - a working `Read` is a
prerequisite. (The stub also means the resource never detects drift or out-of-band deletion
for domains it created, so implementing `Read` fixes refresh behavior as a side benefit.)

### Proposed change

1. Implement `resourceCloudStackDomainRead`:
- call `listDomains` with `id=d.Id()` (and `listall=true`),
- on `count: 0`, call `d.SetId("")` so Terraform drops the missing resource,
- populate the schema attributes from the response (`name`, `network_domain`,
`parent_domain_id` from `parentdomainid`, `domain_id`).
2. Add the importer, following the same pattern used by the other SDK-based resources in this
provider:

Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},

The import id would be the domain UUID, consistent with the other resources.

Note that `listDomains` is an admin-scoped command, but that matches the resource itself -
only admins can create domains, so any credentials able to manage `cloudstack_domain` can
also read it.

### Environment

- Provider version: latest
- CloudStack version: latest

Contributor guide

Open the contributing guide

Research direction

Start in cloudstack/resource_cloudstack_domain.go with resourceCloudStackDomainRead and the resource schema, then compare the importer pattern used by other SDK-based resources. Trace listDomains with an ID and run the relevant provider tests; done means imported domains populate the listed attributes and missing domains are removed from state.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, terraform
Domain
cloud, infrastructure
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.