/
data_source_google_composer_image_versions.go
99 lines (87 loc) · 2.49 KB
/
data_source_google_composer_image_versions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package google
import (
"fmt"
"log"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func dataSourceGoogleComposerImageVersions() *schema.Resource {
return &schema.Resource{
Read: dataSourceGoogleComposerImageVersionsRead,
Schema: map[string]*schema.Schema{
"project": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"region": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"image_versions": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"image_version_id": {
Type: schema.TypeString,
Computed: true,
},
"supported_python_versions": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
},
},
},
}
}
func dataSourceGoogleComposerImageVersionsRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
userAgent, err := generateUserAgentString(d, config.userAgent)
if err != nil {
return err
}
project, err := getProject(d, config)
if err != nil {
return err
}
region, err := getRegion(d, config)
if err != nil {
return err
}
url, err := replaceVars(d, config, "{{ComposerBasePath}}projects/{{project}}/locations/{{region}}/imageVersions")
if err != nil {
return err
}
versions, err := paginatedListRequest(project, url, userAgent, config, flattenGoogleComposerImageVersions)
if err != nil {
return fmt.Errorf("Error listing Composer image versions: %s", err)
}
log.Printf("[DEBUG] Received Composer Image Versions: %q", versions)
if err := d.Set("image_versions", versions); err != nil {
return fmt.Errorf("Error setting image_versions: %s", err)
}
if err := d.Set("region", region); err != nil {
return fmt.Errorf("Error setting region: %s", err)
}
if err := d.Set("project", project); err != nil {
return fmt.Errorf("Error setting project: %s", err)
}
d.SetId(fmt.Sprintf("projects/%s/regions/%s", project, region))
return nil
}
func flattenGoogleComposerImageVersions(resp map[string]interface{}) []interface{} {
verObjList := resp["imageVersions"].([]interface{})
versions := make([]interface{}, len(verObjList))
for i, v := range verObjList {
verObj := v.(map[string]interface{})
versions[i] = map[string]interface{}{
"image_version_id": verObj["imageVersionId"],
"supported_python_versions": verObj["supportedPythonVersions"],
}
}
return versions
}