driftctl/pkg/remote/google/google_dns_managed_zone_enu...

60 lines
1.7 KiB
Go

package google
import (
"strings"
"github.com/sirupsen/logrus"
remoteerror "github.com/snyk/driftctl/pkg/remote/error"
"github.com/snyk/driftctl/pkg/remote/google/repository"
"github.com/snyk/driftctl/pkg/resource"
"github.com/snyk/driftctl/pkg/resource/google"
)
type GoogleDNSManagedZoneEnumerator struct {
repository repository.AssetRepository
factory resource.ResourceFactory
}
func NewGoogleDNSManagedZoneEnumerator(repo repository.AssetRepository, factory resource.ResourceFactory) *GoogleDNSManagedZoneEnumerator {
return &GoogleDNSManagedZoneEnumerator{
repository: repo,
factory: factory,
}
}
func (e *GoogleDNSManagedZoneEnumerator) SupportedType() resource.ResourceType {
return google.GoogleDNSManagedZoneResourceType
}
func (e *GoogleDNSManagedZoneEnumerator) Enumerate() ([]*resource.Resource, error) {
resources, err := e.repository.SearchAllDNSManagedZones()
if err != nil {
return nil, remoteerror.NewResourceListingError(err, string(e.SupportedType()))
}
results := make([]*resource.Resource, 0, len(resources))
// We should have ID = "projects/cloudskiff-dev-elie/managedZones/example-zone"
// We have projects/cloudskiff-dev-elie/managedZones/2435093289230056557
for _, res := range resources {
id := trimResourceName(res.Name)
splittedId := strings.Split(id, "/managedZones/")
if len(splittedId) != 2 {
logrus.WithField("id", res.Name).Warn("Cannot parse google_dns_managed_zone ID")
continue
}
id = strings.Join([]string{splittedId[0], "managedZones", res.DisplayName}, "/")
results = append(
results,
e.factory.CreateAbstractResource(
string(e.SupportedType()),
id,
map[string]interface{}{},
),
)
}
return results, err
}