diff --git a/internal/resources/grafana/common_lister.go b/internal/resources/grafana/common_lister.go index 2a9762038..08922539e 100644 --- a/internal/resources/grafana/common_lister.go +++ b/internal/resources/grafana/common_lister.go @@ -3,6 +3,7 @@ package grafana import ( "context" "fmt" + "strings" "sync" goapi "github.com/grafana/grafana-openapi-client-go/client" @@ -12,14 +13,16 @@ import ( // ListerData is used as the data arg in "ListIDs" functions. It allows getting data common to multiple resources. type ListerData struct { - singleOrg bool - orgIDs []int64 - orgsInit sync.Once + omitSingleOrgID bool + singleOrg bool + orgIDs []int64 + orgsInit sync.Once } -func NewListerData(singleOrg bool) *ListerData { +func NewListerData(singleOrg, omitSingleOrgID bool) *ListerData { return &ListerData{ - singleOrg: singleOrg, + singleOrg: singleOrg, + omitSingleOrgID: omitSingleOrgID, } } @@ -84,7 +87,15 @@ func listerFunctionOrgResource(listerFunc grafanaOrgResourceListerFunc) common.R if err != nil { return nil, err } - ids = append(ids, idsInOrg...) + + // Trim org ID from IDs if there is only one org and it's the default org + if len(orgIDs) == 1 && (orgID <= 1) && data.omitSingleOrgID { + for _, id := range idsInOrg { + ids = append(ids, strings.TrimPrefix(id, fmt.Sprintf("%d:", orgID))) + } + } else { + ids = append(ids, idsInOrg...) + } } return ids, nil diff --git a/internal/testutils/lister.go b/internal/testutils/lister.go index 102c55d55..231613e90 100644 --- a/internal/testutils/lister.go +++ b/internal/testutils/lister.go @@ -46,7 +46,7 @@ func CheckLister(terraformResource string) resource.TestCheckFunc { // Get the list of IDs from the lister function ctx := context.Background() - var listerData any = grafana.NewListerData(false) + var listerData any = grafana.NewListerData(false, false) if resource.Category == common.CategoryCloud { listerData = cloud.NewListerData(os.Getenv("GRAFANA_CLOUD_ORG")) } diff --git a/pkg/generate/generate.go b/pkg/generate/generate.go index 6bc5b5625..724166dea 100644 --- a/pkg/generate/generate.go +++ b/pkg/generate/generate.go @@ -249,9 +249,12 @@ func generateImportBlocks(ctx context.Context, client *common.Client, listerData var blocks []*hclwrite.Block for _, id := range ids { cleanedID := allowedTerraformChars.ReplaceAllString(id, "_") - if provider != "cloud" { + if provider != "cloud" && provider != "" { cleanedID = strings.ReplaceAll(provider, "-", "_") + "_" + cleanedID } + if cleanedID[0] >= '0' && cleanedID[0] <= '9' { + cleanedID = "_" + cleanedID + } matched, err := filterResourceByName(resource.Name, cleanedID, cfg.IncludeResources) if err != nil { diff --git a/pkg/generate/generate_test.go b/pkg/generate/generate_test.go index a38170c5f..a82e0c139 100644 --- a/pkg/generate/generate_test.go +++ b/pkg/generate/generate_test.go @@ -134,7 +134,7 @@ func TestAccGenerate(t *testing.T) { name: "dashboard-filter-strict", config: testutils.TestAccExample(t, "resources/grafana_dashboard/resource.tf"), generateConfig: func(cfg *generate.Config) { - cfg.IncludeResources = []string{"grafana_dashboard._1_my-dashboard-uid"} + cfg.IncludeResources = []string{"grafana_dashboard.my-dashboard-uid"} }, check: func(t *testing.T, tempDir string) { assertFiles(t, tempDir, "testdata/generate/dashboard-filtered", []string{ @@ -147,7 +147,7 @@ func TestAccGenerate(t *testing.T) { name: "dashboard-filter-wildcard-on-resource-type", config: testutils.TestAccExample(t, "resources/grafana_dashboard/resource.tf"), generateConfig: func(cfg *generate.Config) { - cfg.IncludeResources = []string{"*._1_my-dashboard-uid"} + cfg.IncludeResources = []string{"*.my-dashboard-uid"} }, check: func(t *testing.T, tempDir string) { assertFiles(t, tempDir, "testdata/generate/dashboard-filtered", []string{ diff --git a/pkg/generate/grafana.go b/pkg/generate/grafana.go index 55aac2ce3..c2c89fa1b 100644 --- a/pkg/generate/grafana.go +++ b/pkg/generate/grafana.go @@ -47,7 +47,7 @@ func generateGrafanaResources(ctx context.Context, cfg *Config, stack stack, gen } singleOrg := !strings.Contains(stack.managementKey, ":") - listerData := grafana.NewListerData(singleOrg) + listerData := grafana.NewListerData(singleOrg, true) // Generate resources config := provider.ProviderConfig{ diff --git a/pkg/generate/testdata/generate/dashboard-crossplane/contact-point-1-email-receiver.yaml b/pkg/generate/testdata/generate/dashboard-crossplane/contact-point-email-receiver.yaml similarity index 93% rename from pkg/generate/testdata/generate/dashboard-crossplane/contact-point-1-email-receiver.yaml rename to pkg/generate/testdata/generate/dashboard-crossplane/contact-point-email-receiver.yaml index dd57958cc..b9590aa72 100644 --- a/pkg/generate/testdata/generate/dashboard-crossplane/contact-point-1-email-receiver.yaml +++ b/pkg/generate/testdata/generate/dashboard-crossplane/contact-point-email-receiver.yaml @@ -1,7 +1,7 @@ apiVersion: alerting.grafana.crossplane.io/v1alpha1 kind: ContactPoint metadata: - name: 1-email-receiver + name: email-receiver annotations: crossplane.io/external-name: 1:email receiver spec: diff --git a/pkg/generate/testdata/generate/dashboard-crossplane/dashboard-1-my-dashboard-uid.yaml b/pkg/generate/testdata/generate/dashboard-crossplane/dashboard-my-dashboard-uid.yaml similarity index 91% rename from pkg/generate/testdata/generate/dashboard-crossplane/dashboard-1-my-dashboard-uid.yaml rename to pkg/generate/testdata/generate/dashboard-crossplane/dashboard-my-dashboard-uid.yaml index 431cd4967..a27242431 100644 --- a/pkg/generate/testdata/generate/dashboard-crossplane/dashboard-1-my-dashboard-uid.yaml +++ b/pkg/generate/testdata/generate/dashboard-crossplane/dashboard-my-dashboard-uid.yaml @@ -1,7 +1,7 @@ apiVersion: oss.grafana.crossplane.io/v1alpha1 kind: Dashboard metadata: - name: 1-my-dashboard-uid + name: my-dashboard-uid annotations: crossplane.io/external-name: 1:my-dashboard-uid spec: diff --git a/pkg/generate/testdata/generate/dashboard-crossplane/folder-1-my-folder-uid.yaml b/pkg/generate/testdata/generate/dashboard-crossplane/folder-my-folder-uid.yaml similarity index 91% rename from pkg/generate/testdata/generate/dashboard-crossplane/folder-1-my-folder-uid.yaml rename to pkg/generate/testdata/generate/dashboard-crossplane/folder-my-folder-uid.yaml index b87c2baf7..b6975c9a5 100644 --- a/pkg/generate/testdata/generate/dashboard-crossplane/folder-1-my-folder-uid.yaml +++ b/pkg/generate/testdata/generate/dashboard-crossplane/folder-my-folder-uid.yaml @@ -1,7 +1,7 @@ apiVersion: oss.grafana.crossplane.io/v1alpha1 kind: Folder metadata: - name: 1-my-folder-uid + name: my-folder-uid annotations: crossplane.io/external-name: 1:my-folder-uid spec: diff --git a/pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-1-policy.yaml b/pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-policy.yaml similarity index 95% rename from pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-1-policy.yaml rename to pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-policy.yaml index 15d1fc2e6..b01b5cffa 100644 --- a/pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-1-policy.yaml +++ b/pkg/generate/testdata/generate/dashboard-crossplane/notification-policy-policy.yaml @@ -1,7 +1,7 @@ apiVersion: alerting.grafana.crossplane.io/v1alpha1 kind: NotificationPolicy metadata: - name: 1-policy + name: policy annotations: crossplane.io/external-name: 1:policy spec: diff --git a/pkg/generate/testdata/generate/dashboard-filtered/imports.tf b/pkg/generate/testdata/generate/dashboard-filtered/imports.tf index 7a41c7fb1..72ef42366 100644 --- a/pkg/generate/testdata/generate/dashboard-filtered/imports.tf +++ b/pkg/generate/testdata/generate/dashboard-filtered/imports.tf @@ -1,4 +1,4 @@ import { - to = grafana_dashboard._1_my-dashboard-uid - id = "1:my-dashboard-uid" + to = grafana_dashboard.my-dashboard-uid + id = "my-dashboard-uid" } diff --git a/pkg/generate/testdata/generate/dashboard-filtered/resources.tf b/pkg/generate/testdata/generate/dashboard-filtered/resources.tf index 43c89b738..275f253c9 100644 --- a/pkg/generate/testdata/generate/dashboard-filtered/resources.tf +++ b/pkg/generate/testdata/generate/dashboard-filtered/resources.tf @@ -1,8 +1,8 @@ # __generated__ by Terraform # Please review these resources and move them into your main configuration files. -# __generated__ by Terraform from "1:my-dashboard-uid" -resource "grafana_dashboard" "_1_my-dashboard-uid" { +# __generated__ by Terraform from "my-dashboard-uid" +resource "grafana_dashboard" "my-dashboard-uid" { config_json = jsonencode({ title = "My Dashboard" uid = "my-dashboard-uid" diff --git a/pkg/generate/testdata/generate/dashboard-json/imports.tf.json b/pkg/generate/testdata/generate/dashboard-json/imports.tf.json index 729df172d..a120c9375 100644 --- a/pkg/generate/testdata/generate/dashboard-json/imports.tf.json +++ b/pkg/generate/testdata/generate/dashboard-json/imports.tf.json @@ -1,20 +1,20 @@ { "import": [ { - "id": "1:email receiver", - "to": "grafana_contact_point._1_email_receiver" + "id": "email receiver", + "to": "grafana_contact_point.email_receiver" }, { - "id": "1:my-dashboard-uid", - "to": "grafana_dashboard._1_my-dashboard-uid" + "id": "my-dashboard-uid", + "to": "grafana_dashboard.my-dashboard-uid" }, { - "id": "1:my-folder-uid", - "to": "grafana_folder._1_my-folder-uid" + "id": "my-folder-uid", + "to": "grafana_folder.my-folder-uid" }, { - "id": "1:policy", - "to": "grafana_notification_policy._1_policy" + "id": "policy", + "to": "grafana_notification_policy.policy" }, { "id": "1", diff --git a/pkg/generate/testdata/generate/dashboard-json/resources.tf.json b/pkg/generate/testdata/generate/dashboard-json/resources.tf.json index f38a834f5..b297291b3 100644 --- a/pkg/generate/testdata/generate/dashboard-json/resources.tf.json +++ b/pkg/generate/testdata/generate/dashboard-json/resources.tf.json @@ -1,7 +1,7 @@ { "resource": { "grafana_contact_point": { - "_1_email_receiver": [ + "email_receiver": [ { "disable_provenance": true, "email": [ @@ -18,15 +18,15 @@ ] }, "grafana_dashboard": { - "_1_my-dashboard-uid": [ + "my-dashboard-uid": [ { "config_json": "${jsonencode({\n title = \"My Dashboard\"\n uid = \"my-dashboard-uid\"\n })}", - "folder": "${grafana_folder._1_my-folder-uid.uid}" + "folder": "${grafana_folder.my-folder-uid.uid}" } ] }, "grafana_folder": { - "_1_my-folder-uid": [ + "my-folder-uid": [ { "title": "My Folder", "uid": "my-folder-uid" @@ -34,7 +34,7 @@ ] }, "grafana_notification_policy": { - "_1_policy": [ + "policy": [ { "contact_point": "grafana-default-email", "disable_provenance": true, diff --git a/pkg/generate/testdata/generate/dashboard-restricted-permissions/imports.tf b/pkg/generate/testdata/generate/dashboard-restricted-permissions/imports.tf index 4a5d673a0..e3f28a553 100644 --- a/pkg/generate/testdata/generate/dashboard-restricted-permissions/imports.tf +++ b/pkg/generate/testdata/generate/dashboard-restricted-permissions/imports.tf @@ -1,9 +1,9 @@ import { - to = grafana_dashboard._0_my-dashboard-uid - id = "0:my-dashboard-uid" + to = grafana_dashboard.my-dashboard-uid + id = "my-dashboard-uid" } import { - to = grafana_folder._0_my-folder-uid - id = "0:my-folder-uid" + to = grafana_folder.my-folder-uid + id = "my-folder-uid" } diff --git a/pkg/generate/testdata/generate/dashboard-restricted-permissions/resources.tf b/pkg/generate/testdata/generate/dashboard-restricted-permissions/resources.tf index cdf000b62..0d4c4ca85 100644 --- a/pkg/generate/testdata/generate/dashboard-restricted-permissions/resources.tf +++ b/pkg/generate/testdata/generate/dashboard-restricted-permissions/resources.tf @@ -1,17 +1,17 @@ # __generated__ by Terraform # Please review these resources and move them into your main configuration files. -# __generated__ by Terraform from "0:my-dashboard-uid" -resource "grafana_dashboard" "_0_my-dashboard-uid" { +# __generated__ by Terraform from "my-dashboard-uid" +resource "grafana_dashboard" "my-dashboard-uid" { config_json = jsonencode({ title = "My Dashboard" uid = "my-dashboard-uid" }) - folder = grafana_folder._0_my-folder-uid.uid + folder = grafana_folder.my-folder-uid.uid } -# __generated__ by Terraform from "0:my-folder-uid" -resource "grafana_folder" "_0_my-folder-uid" { +# __generated__ by Terraform from "my-folder-uid" +resource "grafana_folder" "my-folder-uid" { title = "My Folder" uid = "my-folder-uid" } diff --git a/pkg/generate/testdata/generate/dashboard/imports.tf b/pkg/generate/testdata/generate/dashboard/imports.tf index 6bbd2e632..945fa5963 100644 --- a/pkg/generate/testdata/generate/dashboard/imports.tf +++ b/pkg/generate/testdata/generate/dashboard/imports.tf @@ -1,21 +1,21 @@ import { - to = grafana_contact_point._1_email_receiver - id = "1:email receiver" + to = grafana_contact_point.email_receiver + id = "email receiver" } import { - to = grafana_dashboard._1_my-dashboard-uid - id = "1:my-dashboard-uid" + to = grafana_dashboard.my-dashboard-uid + id = "my-dashboard-uid" } import { - to = grafana_folder._1_my-folder-uid - id = "1:my-folder-uid" + to = grafana_folder.my-folder-uid + id = "my-folder-uid" } import { - to = grafana_notification_policy._1_policy - id = "1:policy" + to = grafana_notification_policy.policy + id = "policy" } import { diff --git a/pkg/generate/testdata/generate/dashboard/resources.tf b/pkg/generate/testdata/generate/dashboard/resources.tf index 517425570..4815cccad 100644 --- a/pkg/generate/testdata/generate/dashboard/resources.tf +++ b/pkg/generate/testdata/generate/dashboard/resources.tf @@ -1,8 +1,8 @@ # __generated__ by Terraform # Please review these resources and move them into your main configuration files. -# __generated__ by Terraform from "1:email receiver" -resource "grafana_contact_point" "_1_email_receiver" { +# __generated__ by Terraform from "email receiver" +resource "grafana_contact_point" "email_receiver" { disable_provenance = true name = "email receiver" email { @@ -12,23 +12,23 @@ resource "grafana_contact_point" "_1_email_receiver" { } } -# __generated__ by Terraform from "1:my-dashboard-uid" -resource "grafana_dashboard" "_1_my-dashboard-uid" { +# __generated__ by Terraform from "my-dashboard-uid" +resource "grafana_dashboard" "my-dashboard-uid" { config_json = jsonencode({ title = "My Dashboard" uid = "my-dashboard-uid" }) - folder = grafana_folder._1_my-folder-uid.uid + folder = grafana_folder.my-folder-uid.uid } -# __generated__ by Terraform from "1:my-folder-uid" -resource "grafana_folder" "_1_my-folder-uid" { +# __generated__ by Terraform from "my-folder-uid" +resource "grafana_folder" "my-folder-uid" { title = "My Folder" uid = "my-folder-uid" } -# __generated__ by Terraform from "1:policy" -resource "grafana_notification_policy" "_1_policy" { +# __generated__ by Terraform from "policy" +resource "grafana_notification_policy" "policy" { contact_point = "grafana-default-email" disable_provenance = true group_by = ["grafana_folder", "alertname"]