mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-03 01:01:06 +00:00
providers/google: add google_container_versions data source.
Add a data source for listing available versions for Container Engine clusters or retrieving the latest available version. This is mostly to support our tests for specifying a version for cluster creation; the withVersion test has been updated to use the data source, meaning it will stop failing on us as new versions get released.
This commit is contained in:
parent
fe4873c1e1
commit
56dfb7d8f8
67
data_source_google_container_versions.go
Normal file
67
data_source_google_container_versions.go
Normal file
@ -0,0 +1,67 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/schema"
|
||||
)
|
||||
|
||||
func dataSourceGoogleContainerVersions() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Read: dataSourceGoogleContainerVersionsRead,
|
||||
Schema: map[string]*schema.Schema{
|
||||
"project": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
},
|
||||
"zone": {
|
||||
Type: schema.TypeString,
|
||||
Required: true,
|
||||
},
|
||||
"latest_master_version": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"latest_node_version": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"valid_master_versions": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{Type: schema.TypeString},
|
||||
},
|
||||
"valid_node_versions": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{Type: schema.TypeString},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func dataSourceGoogleContainerVersionsRead(d *schema.ResourceData, meta interface{}) error {
|
||||
config := meta.(*Config)
|
||||
|
||||
project, err := getProject(d, config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
zone := d.Get("zone").(string)
|
||||
|
||||
resp, err := config.clientContainer.Projects.Zones.GetServerconfig(project, zone).Do()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error retrieving available container cluster versions: %s", err.Error())
|
||||
}
|
||||
|
||||
d.Set("valid_master_versions", resp.ValidMasterVersions)
|
||||
d.Set("valid_node_versions", resp.ValidNodeVersions)
|
||||
d.Set("latest_master_version", resp.ValidMasterVersions[0])
|
||||
d.Set("latest_node_version", resp.ValidNodeVersions[0])
|
||||
|
||||
d.SetId(time.Now().UTC().String())
|
||||
|
||||
return nil
|
||||
}
|
97
data_source_google_container_versions_test.go
Normal file
97
data_source_google_container_versions_test.go
Normal file
@ -0,0 +1,97 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/resource"
|
||||
"github.com/hashicorp/terraform/terraform"
|
||||
)
|
||||
|
||||
func TestAccGoogleContainerVersions_basic(t *testing.T) {
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
Config: testAccCheckGoogleContainerVersionsConfig,
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckGoogleContainerVersionsMeta("data.google_container_versions.versions"),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func testAccCheckGoogleContainerVersionsMeta(n string) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
rs, ok := s.RootModule().Resources[n]
|
||||
if !ok {
|
||||
return fmt.Errorf("Can't find versions data source: %s", n)
|
||||
}
|
||||
|
||||
if rs.Primary.ID == "" {
|
||||
return errors.New("versions data source ID not set.")
|
||||
}
|
||||
|
||||
nodeCount, ok := rs.Primary.Attributes["valid_node_versions.#"]
|
||||
if !ok {
|
||||
return errors.New("can't find 'valid_node_versions' attribute")
|
||||
}
|
||||
|
||||
noOfNodes, err := strconv.Atoi(nodeCount)
|
||||
if err != nil {
|
||||
return errors.New("failed to read number of valid node versions")
|
||||
}
|
||||
if noOfNodes < 2 {
|
||||
return fmt.Errorf("expected at least 2 valid node versions, received %d, this is most likely a bug",
|
||||
noOfNodes)
|
||||
}
|
||||
|
||||
for i := 0; i < noOfNodes; i++ {
|
||||
idx := "valid_node_versions." + strconv.Itoa(i)
|
||||
v, ok := rs.Primary.Attributes[idx]
|
||||
if !ok {
|
||||
return fmt.Errorf("valid node versions list is corrupt (%q not found), this is definitely a bug", idx)
|
||||
}
|
||||
if len(v) < 1 {
|
||||
return fmt.Errorf("Empty node version (%q), this is definitely a bug", idx)
|
||||
}
|
||||
}
|
||||
|
||||
masterCount, ok := rs.Primary.Attributes["valid_master_versions.#"]
|
||||
if !ok {
|
||||
return errors.New("can't find 'valid_master_versions' attribute")
|
||||
}
|
||||
|
||||
noOfMasters, err := strconv.Atoi(masterCount)
|
||||
if err != nil {
|
||||
return errors.New("failed to read number of valid master versions")
|
||||
}
|
||||
if noOfMasters < 2 {
|
||||
return fmt.Errorf("expected at least 2 valid master versions, received %d, this is most likely a bug",
|
||||
noOfMasters)
|
||||
}
|
||||
|
||||
for i := 0; i < noOfMasters; i++ {
|
||||
idx := "valid_master_versions." + strconv.Itoa(i)
|
||||
v, ok := rs.Primary.Attributes[idx]
|
||||
if !ok {
|
||||
return fmt.Errorf("valid master versions list is corrupt (%q not found), this is definitely a bug", idx)
|
||||
}
|
||||
if len(v) < 1 {
|
||||
return fmt.Errorf("Empty master version (%q), this is definitely a bug", idx)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
var testAccCheckGoogleContainerVersionsConfig = `
|
||||
data "google_container_versions" "versions" {
|
||||
zone = "us-central1-b"
|
||||
}
|
||||
`
|
@ -52,6 +52,7 @@ func Provider() terraform.ResourceProvider {
|
||||
"google_compute_network": dataSourceGoogleComputeNetwork(),
|
||||
"google_compute_subnetwork": dataSourceGoogleComputeSubnetwork(),
|
||||
"google_compute_zones": dataSourceGoogleComputeZones(),
|
||||
"google_container_versions": dataSourceGoogleContainerVersions(),
|
||||
"google_iam_policy": dataSourceGoogleIamPolicy(),
|
||||
},
|
||||
|
||||
|
@ -400,10 +400,14 @@ resource "google_container_cluster" "with_additional_zones" {
|
||||
}`, acctest.RandString(10))
|
||||
|
||||
var testAccContainerCluster_withVersion = fmt.Sprintf(`
|
||||
data "google_container_versions" "central1a" {
|
||||
zone = "us-central1-a"
|
||||
}
|
||||
|
||||
resource "google_container_cluster" "with_version" {
|
||||
name = "cluster-test-%s"
|
||||
zone = "us-central1-a"
|
||||
node_version = "1.6.1"
|
||||
node_version = "${data.google_container_versions.central1a.latest_node_version}"
|
||||
initial_node_count = 1
|
||||
|
||||
master_auth {
|
||||
|
Loading…
Reference in New Issue
Block a user