From db447eac0b704c79ae36536f6b1ff1c355566b1c Mon Sep 17 00:00:00 2001 From: Eugene Nitsenko Date: Tue, 31 Jul 2018 12:00:14 +0200 Subject: [PATCH 01/15] add. Resource Gamelift Session Queues --- aws/provider.go | 1 + aws/resource_aws_gamelift_queue.go | 200 ++++++++++++++++++ aws/resource_aws_gamelift_queue_test.go | 264 ++++++++++++++++++++++++ 3 files changed, 465 insertions(+) create mode 100644 aws/resource_aws_gamelift_queue.go create mode 100644 aws/resource_aws_gamelift_queue_test.go diff --git a/aws/provider.go b/aws/provider.go index 36d77a719510..9dfc4e93dbdd 100644 --- a/aws/provider.go +++ b/aws/provider.go @@ -442,6 +442,7 @@ func Provider() terraform.ResourceProvider { "aws_gamelift_alias": resourceAwsGameliftAlias(), "aws_gamelift_build": resourceAwsGameliftBuild(), "aws_gamelift_fleet": resourceAwsGameliftFleet(), + "aws_gamelift_queue": resourceAwsGameliftQueue(), "aws_glacier_vault": resourceAwsGlacierVault(), "aws_glue_catalog_database": resourceAwsGlueCatalogDatabase(), "aws_glue_catalog_table": resourceAwsGlueCatalogTable(), diff --git a/aws/resource_aws_gamelift_queue.go b/aws/resource_aws_gamelift_queue.go new file mode 100644 index 000000000000..a7fc33bedebc --- /dev/null +++ b/aws/resource_aws_gamelift_queue.go @@ -0,0 +1,200 @@ +package aws + +import ( + "fmt" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/gamelift" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/helper/validation" + "log" +) + +func resourceAwsGameliftQueue() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsGameliftQueuesCreate, + Read: resourceAwsGameliftQueuesRead, + Update: resourceAwsGameliftQueuesUpdate, + Delete: resourceAwsGameliftQueuesDelete, + + Schema: map[string]*schema.Schema{ + "destinations": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringLenBetween(1, 1024), + }, + "player_latency_policies": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "maximum_individual_player_latency_milliseconds": { + Type: schema.TypeInt, + Required: true, + ValidateFunc: validation.IntAtLeast(0), + }, + "policy_duration_seconds": { + Type: schema.TypeInt, + Optional: true, + ValidateFunc: validation.IntAtLeast(0), + }, + }, + }, + }, + "timeout_in_seconds": { + Type: schema.TypeInt, + Optional: true, + }, + "arn": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func resourceAwsGameliftQueuesCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).gameliftconn + + input := getFullInputCreate(d) + if v, ok := d.GetOk("name"); ok { + input.Name = aws.String(v.(string)) + } + log.Printf("[INFO] Creating Gamelift Session Queue: %s", input) + out, err := conn.CreateGameSessionQueue(&input) + if err != nil { + return err + } + + d.SetId(*out.GameSessionQueue.GameSessionQueueArn) + d.Set("name", out.GameSessionQueue.Name) + + return resourceAwsGameliftQueuesRead(d, meta) +} + +func resourceAwsGameliftQueuesRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).gameliftconn + log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Get("name")) + limit := int64(1) + out, err := conn.DescribeGameSessionQueues(&gamelift.DescribeGameSessionQueuesInput{ + Names: aws.StringSlice([]string{d.Get("name").(string)}), + Limit: &limit, + }) + if err != nil { + if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { + log.Printf("[WARN] Gamelift Session Queues (%s) not found, removing from state", d.Get("name")) + return nil + } + return err + } + sessionQueues := out.GameSessionQueues + + if len(sessionQueues) < 1 { + log.Printf("[WARN] Gamelift Session Queue (%s) not found, removing from state", d.Get("name")) + return nil + } + if len(sessionQueues) != 1 { + return fmt.Errorf("expected exactly 1 Gamelift Session Queues, found %d under %q", + len(sessionQueues), d.Get("name")) + } + sessionQueue := sessionQueues[0] + + d.Set("destinations", sessionQueue.Destinations) + d.Set("name", sessionQueue.Name) + d.Set("player_latency_policies", sessionQueue.PlayerLatencyPolicies) + d.Set("timeout_in_seconds", sessionQueue.TimeoutInSeconds) + + return nil +} + +func resourceAwsGameliftQueuesUpdate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).gameliftconn + + name := d.Get("name").(string) + + log.Printf("[INFO] Updating Gamelift Build: %s", name) + + if d.HasChange("name") || d.HasChange("destinations") || + d.HasChange("player_latency_policies") || d.HasChange("timeout_in_seconds") { + + input := getFullInputUpdate(d) + + _, err := conn.UpdateGameSessionQueue(&input) + if err != nil { + return err + } + } + + return resourceAwsGameliftQueuesRead(d, meta) +} + +func resourceAwsGameliftQueuesDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).gameliftconn + name := d.Get("name").(string) + log.Printf("[INFO] Deleting Gamelift Session Queue: %s", name) + _, err := conn.DeleteGameSessionQueue(&gamelift.DeleteGameSessionQueueInput{ + Name: aws.String(name), + }) + if err != nil { + return err + } + + d.SetId("") + return nil + +} + +func getFullInputCreate(d *schema.ResourceData) gamelift.CreateGameSessionQueueInput { + return gamelift.CreateGameSessionQueueInput{ + Name: aws.String(d.Get("name").(string)), + Destinations: getDestinations(d.Get("destinations").([]interface{})), + PlayerLatencyPolicies: getPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), + } +} + +func getFullInputUpdate(d *schema.ResourceData) gamelift.UpdateGameSessionQueueInput { + return gamelift.UpdateGameSessionQueueInput{ + Name: aws.String(d.Get("name").(string)), + Destinations: getDestinations(d.Get("destinations").([]interface{})), + PlayerLatencyPolicies: getPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), + } +} + +func getDestinations(destinationsMap []interface{}) []*gamelift.GameSessionQueueDestination { + if len(destinationsMap) < 1 { + return nil + } + var destinations []*gamelift.GameSessionQueueDestination + for _, destination := range destinationsMap { + destinations = append( + destinations, + &gamelift.GameSessionQueueDestination{ + DestinationArn: aws.String(destination.(string)), + }) + } + return destinations +} + +func getPlayerLatencyPolicies(destinationsPlayerLatencyPolicyMap []interface{}) []*gamelift.PlayerLatencyPolicy { + if len(destinationsPlayerLatencyPolicyMap) < 1 { + return nil + } + var playerLatencyPolicies []*gamelift.PlayerLatencyPolicy + for _, playerLatencyPolicy := range destinationsPlayerLatencyPolicyMap { + item := playerLatencyPolicy.(map[string]interface{}) + playerLatencyPolicies = append( + playerLatencyPolicies, + &gamelift.PlayerLatencyPolicy{ + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(int64(item["maximum_individual_player_latency_milliseconds"].(int))), + PolicyDurationSeconds: aws.Int64(int64(item["policy_duration_seconds"].(int))), + }) + } + return playerLatencyPolicies +} diff --git a/aws/resource_aws_gamelift_queue_test.go b/aws/resource_aws_gamelift_queue_test.go new file mode 100644 index 000000000000..6600730e334f --- /dev/null +++ b/aws/resource_aws_gamelift_queue_test.go @@ -0,0 +1,264 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/gamelift" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" + "log" + "strings" +) + +const testAccGameliftQueuePrefix = "tfAccQueue-" + +func init() { + resource.AddTestSweepers("aws_gamelift_queue", &resource.Sweeper{ + Name: "aws_gamelift_queue", + F: testSweepGameliftQueue, + }) +} + +func testSweepGameliftQueue(region string) error { + client, err := sharedClientForRegion(region) + if err != nil { + return fmt.Errorf("error getting client: %s", err) + } + conn := client.(*AWSClient).gameliftconn + + out, err := conn.DescribeGameSessionQueues(&gamelift.DescribeGameSessionQueuesInput{}) + + if err != nil { + if testSweepSkipSweepError(err) { + log.Printf("[WARN] Skipping Gamelife Queue sweep for %s: %s", region, err) + return nil + } + return fmt.Errorf("error listing Gamelift Session Queue: %s", err) + + } + + if len(out.GameSessionQueues) == 0 { + log.Print("[DEBUG] No Gamelift Session Queue to sweep") + return nil + } + + log.Printf("[INFO] Found %d Gamelift Session Queue", len(out.GameSessionQueues)) + + for _, queue := range out.GameSessionQueues { + if !strings.HasPrefix(*queue.Name, testAccGameliftQueuePrefix) { + continue + } + + log.Printf("[INFO] Deleting Gamelift Session Queue %q", *queue.Name) + _, err := conn.DeleteGameSessionQueue(&gamelift.DeleteGameSessionQueueInput{ + Name: aws.String(*queue.Name), + }) + if err != nil { + return fmt.Errorf("error deleting Gamelift Session Queue (%s): %s", + *queue.Name, err) + } + } + + if err != nil { + if testSweepSkipSweepError(err) { + log.Printf("[WARN] Skipping Gamelift Session Queue sweep for %s: %s", region, err) + return nil + } + return fmt.Errorf("error listing Gamelift Session Queue: %s", err) + } + + return nil + +} + +func TestAccAWSGameliftQueue_basic(t *testing.T) { + var conf gamelift.GameSessionQueue + + rString := acctest.RandString(8) + queueName := getComposedQueueName(rString) + destinations := gamelift.GameSessionQueueDestination{ + DestinationArn: aws.String(acctest.RandString(8)), + } + playerLatencyPolicies := gamelift.PlayerLatencyPolicy{ + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(20), + PolicyDurationSeconds: aws.Int64(30), + } + timeoutInSeconds := int64(124) + + //uQueueName := getComposedQueueName(fmt.Sprintf("else-%s", rString)) + uDestinations := gamelift.GameSessionQueueDestination{ + DestinationArn: aws.String(acctest.RandString(8)), + } + uPlayerLatencyPolicies := gamelift.PlayerLatencyPolicy{ + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(30), + PolicyDurationSeconds: aws.Int64(40), + } + uTimeoutInSeconds := int64(600) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSGameliftQueueDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSGameliftQueueBasicConfig(queueName, destinations, + playerLatencyPolicies, timeoutInSeconds), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", queueName), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "destinations.#", + "1"), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "destinations.0", + fmt.Sprintf("%s", *destinations.DestinationArn)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.#", "1"), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.0.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.0.policy_duration_seconds", + fmt.Sprintf("%d", *playerLatencyPolicies.PolicyDurationSeconds)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "timeout_in_seconds", fmt.Sprintf("%d", timeoutInSeconds)), + ), + }, + { + Config: testAccAWSGameliftQueueBasicConfig(queueName, uDestinations, + uPlayerLatencyPolicies, uTimeoutInSeconds), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", queueName), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "destinations.#", "1"), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "destinations.0", + fmt.Sprintf("%s", *uDestinations.DestinationArn)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.#", "1"), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.0.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *uPlayerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "player_latency_policies.0.policy_duration_seconds", + fmt.Sprintf("%d", *uPlayerLatencyPolicies.PolicyDurationSeconds)), + + resource.TestCheckResourceAttr("aws_gamelift_queue.test", + "timeout_in_seconds", fmt.Sprintf("%d", uTimeoutInSeconds)), + ), + }, + }, + }) +} + +func testAccCheckAWSGameliftQueueExists(n string, res *gamelift.GameSessionQueue) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("no Gamelift Session Queue Name is set") + } + + conn := testAccProvider.Meta().(*AWSClient).gameliftconn + + name := rs.Primary.Attributes["name"] + limit := int64(1) + out, err := conn.DescribeGameSessionQueues(&gamelift.DescribeGameSessionQueuesInput{ + Names: aws.StringSlice([]string{name}), + Limit: &limit, + }) + if err != nil { + return err + } + attributes := out.GameSessionQueues + if len(attributes) < 1 { + return fmt.Errorf("gmelift Session Queue %q not found", name) + } + if len(attributes) != 1 { + return fmt.Errorf("expected exactly 1 Gamelift Session Queue, found %d under %q", + len(attributes), name) + } + queue := attributes[0] + + if *queue.Name != name { + return fmt.Errorf("gamelift Session Queue not found") + } + + *res = *queue + + return nil + } +} + +func testAccCheckAWSGameliftQueueDestroy(s *terraform.State) error { + conn := testAccProvider.Meta().(*AWSClient).gameliftconn + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_gamelift_queue" { + continue + } + + name := rs.Primary.Attributes["name"] + limit := int64(1) + out, err := conn.DescribeGameSessionQueues(&gamelift.DescribeGameSessionQueuesInput{ + Names: aws.StringSlice([]string{name}), + Limit: &limit, + }) + if err != nil { + return err + } + + attributes := out.GameSessionQueues + + if len(attributes) > 0 { + return fmt.Errorf("gamelift Session Queue still exists") + } + + return nil + } + + return nil + +} + +func testAccAWSGameliftQueueBasicConfig(queueName string, destinations gamelift.GameSessionQueueDestination, + playerLatencyPolicies gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { + return fmt.Sprintf(` +resource "aws_gamelift_queue" "test" { + name = "%s" + destinations = ["%s"] + player_latency_policies { + maximum_individual_player_latency_milliseconds = %d + policy_duration_seconds = %d + } + timeout_in_seconds = %d +} +`, + queueName, + *destinations.DestinationArn, + *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds, + *playerLatencyPolicies.PolicyDurationSeconds, + timeoutInSeconds) +} + +func getComposedQueueName(name string) string { + return fmt.Sprintf("%s%s", testAccGameliftQueuePrefix, name) +} From cbd58453f4d7a1f2026ee8212b96eae94226ef35 Mon Sep 17 00:00:00 2001 From: Eugene Nitsenko Date: Tue, 31 Jul 2018 13:34:16 +0200 Subject: [PATCH 02/15] fix. Changed log info message --- aws/resource_aws_gamelift_queue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/resource_aws_gamelift_queue.go b/aws/resource_aws_gamelift_queue.go index a7fc33bedebc..f43f2c27a079 100644 --- a/aws/resource_aws_gamelift_queue.go +++ b/aws/resource_aws_gamelift_queue.go @@ -117,7 +117,7 @@ func resourceAwsGameliftQueuesUpdate(d *schema.ResourceData, meta interface{}) e name := d.Get("name").(string) - log.Printf("[INFO] Updating Gamelift Build: %s", name) + log.Printf("[INFO] Updating Gamelift Session Queue: %s", name) if d.HasChange("name") || d.HasChange("destinations") || d.HasChange("player_latency_policies") || d.HasChange("timeout_in_seconds") { From e5febc56f388b84ae363a559edefdd2579ff0137 Mon Sep 17 00:00:00 2001 From: Eugene Nitsenko Date: Tue, 31 Jul 2018 15:05:34 +0200 Subject: [PATCH 03/15] fix. Renamed functions in the plural --- aws/resource_aws_gamelift_queue.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/aws/resource_aws_gamelift_queue.go b/aws/resource_aws_gamelift_queue.go index f43f2c27a079..4a78129f805a 100644 --- a/aws/resource_aws_gamelift_queue.go +++ b/aws/resource_aws_gamelift_queue.go @@ -11,10 +11,10 @@ import ( func resourceAwsGameliftQueue() *schema.Resource { return &schema.Resource{ - Create: resourceAwsGameliftQueuesCreate, - Read: resourceAwsGameliftQueuesRead, - Update: resourceAwsGameliftQueuesUpdate, - Delete: resourceAwsGameliftQueuesDelete, + Create: resourceAwsGameliftQueueCreate, + Read: resourceAwsGameliftQueueRead, + Update: resourceAwsGameliftQueueUpdate, + Delete: resourceAwsGameliftQueueDelete, Schema: map[string]*schema.Schema{ "destinations": { @@ -58,7 +58,7 @@ func resourceAwsGameliftQueue() *schema.Resource { } } -func resourceAwsGameliftQueuesCreate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftQueueCreate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn input := getFullInputCreate(d) @@ -74,10 +74,10 @@ func resourceAwsGameliftQueuesCreate(d *schema.ResourceData, meta interface{}) e d.SetId(*out.GameSessionQueue.GameSessionQueueArn) d.Set("name", out.GameSessionQueue.Name) - return resourceAwsGameliftQueuesRead(d, meta) + return resourceAwsGameliftQueueRead(d, meta) } -func resourceAwsGameliftQueuesRead(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftQueueRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Get("name")) limit := int64(1) @@ -112,7 +112,7 @@ func resourceAwsGameliftQueuesRead(d *schema.ResourceData, meta interface{}) err return nil } -func resourceAwsGameliftQueuesUpdate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftQueueUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) @@ -130,10 +130,10 @@ func resourceAwsGameliftQueuesUpdate(d *schema.ResourceData, meta interface{}) e } } - return resourceAwsGameliftQueuesRead(d, meta) + return resourceAwsGameliftQueueRead(d, meta) } -func resourceAwsGameliftQueuesDelete(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftQueueDelete(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) log.Printf("[INFO] Deleting Gamelift Session Queue: %s", name) From 02a44e5376bc18f5d4bdfadd944a1135ca4907e5 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 13:18:57 +0200 Subject: [PATCH 04/15] Feedback fixes --- aws/resource_aws_gamelift_queue.go | 74 +++++++++++++------------ aws/resource_aws_gamelift_queue_test.go | 49 +++++----------- 2 files changed, 54 insertions(+), 69 deletions(-) diff --git a/aws/resource_aws_gamelift_queue.go b/aws/resource_aws_gamelift_queue.go index 4a78129f805a..6d5f14c52d43 100644 --- a/aws/resource_aws_gamelift_queue.go +++ b/aws/resource_aws_gamelift_queue.go @@ -61,7 +61,12 @@ func resourceAwsGameliftQueue() *schema.Resource { func resourceAwsGameliftQueueCreate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn - input := getFullInputCreate(d) + input := gamelift.CreateGameSessionQueueInput{ + Name: aws.String(d.Get("name").(string)), + Destinations: expandGameliftGameSessionQueueDestinations(d.Get("destinations").([]interface{})), + PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), + } if v, ok := d.GetOk("name"); ok { input.Name = aws.String(v.(string)) } @@ -88,6 +93,7 @@ func resourceAwsGameliftQueueRead(d *schema.ResourceData, meta interface{}) erro if err != nil { if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { log.Printf("[WARN] Gamelift Session Queues (%s) not found, removing from state", d.Get("name")) + d.SetId("") return nil } return err @@ -96,6 +102,7 @@ func resourceAwsGameliftQueueRead(d *schema.ResourceData, meta interface{}) erro if len(sessionQueues) < 1 { log.Printf("[WARN] Gamelift Session Queue (%s) not found, removing from state", d.Get("name")) + d.SetId("") return nil } if len(sessionQueues) != 1 { @@ -104,14 +111,29 @@ func resourceAwsGameliftQueueRead(d *schema.ResourceData, meta interface{}) erro } sessionQueue := sessionQueues[0] - d.Set("destinations", sessionQueue.Destinations) + d.Set("arn", sessionQueue.GameSessionQueueArn) d.Set("name", sessionQueue.Name) - d.Set("player_latency_policies", sessionQueue.PlayerLatencyPolicies) d.Set("timeout_in_seconds", sessionQueue.TimeoutInSeconds) + d.Set("destinations", sessionQueue.Destinations) + if err := d.Set("player_latency_policies", flattenGameliftPlayerLatencyPolicies(sessionQueue.PlayerLatencyPolicies)); err != nil { + return fmt.Errorf("error setting player_latency_policies: %s", err) + } return nil } +func flattenGameliftPlayerLatencyPolicies(playerLatencyPolicies []*gamelift.PlayerLatencyPolicy) []interface{} { + lst := []interface{}{} + for _, policy := range playerLatencyPolicies { + m := map[string]interface{}{ + "maximum_individual_player_latency_milliseconds": aws.Int64Value(policy.MaximumIndividualPlayerLatencyMilliseconds), + "policy_duration_seconds": aws.Int64Value(policy.PolicyDurationSeconds), + } + lst = append(lst, m) + } + return lst +} + func resourceAwsGameliftQueueUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn @@ -119,15 +141,16 @@ func resourceAwsGameliftQueueUpdate(d *schema.ResourceData, meta interface{}) er log.Printf("[INFO] Updating Gamelift Session Queue: %s", name) - if d.HasChange("name") || d.HasChange("destinations") || - d.HasChange("player_latency_policies") || d.HasChange("timeout_in_seconds") { - - input := getFullInputUpdate(d) + input := gamelift.UpdateGameSessionQueueInput{ + Name: aws.String(d.Get("name").(string)), + Destinations: expandGameliftGameSessionQueueDestinations(d.Get("destinations").([]interface{})), + PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), + } - _, err := conn.UpdateGameSessionQueue(&input) - if err != nil { - return err - } + _, err := conn.UpdateGameSessionQueue(&input) + if err != nil { + return err } return resourceAwsGameliftQueueRead(d, meta) @@ -140,34 +163,17 @@ func resourceAwsGameliftQueueDelete(d *schema.ResourceData, meta interface{}) er _, err := conn.DeleteGameSessionQueue(&gamelift.DeleteGameSessionQueueInput{ Name: aws.String(name), }) + if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { + return nil + } if err != nil { - return err + return fmt.Errorf("error deleting Gamelift Game Session Queue (%s): %s", d.Id(), err) } - d.SetId("") return nil - -} - -func getFullInputCreate(d *schema.ResourceData) gamelift.CreateGameSessionQueueInput { - return gamelift.CreateGameSessionQueueInput{ - Name: aws.String(d.Get("name").(string)), - Destinations: getDestinations(d.Get("destinations").([]interface{})), - PlayerLatencyPolicies: getPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), - TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), - } -} - -func getFullInputUpdate(d *schema.ResourceData) gamelift.UpdateGameSessionQueueInput { - return gamelift.UpdateGameSessionQueueInput{ - Name: aws.String(d.Get("name").(string)), - Destinations: getDestinations(d.Get("destinations").([]interface{})), - PlayerLatencyPolicies: getPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), - TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), - } } -func getDestinations(destinationsMap []interface{}) []*gamelift.GameSessionQueueDestination { +func expandGameliftGameSessionQueueDestinations(destinationsMap []interface{}) []*gamelift.GameSessionQueueDestination { if len(destinationsMap) < 1 { return nil } @@ -182,7 +188,7 @@ func getDestinations(destinationsMap []interface{}) []*gamelift.GameSessionQueue return destinations } -func getPlayerLatencyPolicies(destinationsPlayerLatencyPolicyMap []interface{}) []*gamelift.PlayerLatencyPolicy { +func expandGameliftGameSessionPlayerLatencyPolicies(destinationsPlayerLatencyPolicyMap []interface{}) []*gamelift.PlayerLatencyPolicy { if len(destinationsPlayerLatencyPolicyMap) < 1 { return nil } diff --git a/aws/resource_aws_gamelift_queue_test.go b/aws/resource_aws_gamelift_queue_test.go index 6600730e334f..6562a33f812a 100644 --- a/aws/resource_aws_gamelift_queue_test.go +++ b/aws/resource_aws_gamelift_queue_test.go @@ -37,7 +37,6 @@ func testSweepGameliftQueue(region string) error { return nil } return fmt.Errorf("error listing Gamelift Session Queue: %s", err) - } if len(out.GameSessionQueues) == 0 { @@ -71,27 +70,19 @@ func testSweepGameliftQueue(region string) error { } return nil - } func TestAccAWSGameliftQueue_basic(t *testing.T) { var conf gamelift.GameSessionQueue - rString := acctest.RandString(8) - queueName := getComposedQueueName(rString) - destinations := gamelift.GameSessionQueueDestination{ - DestinationArn: aws.String(acctest.RandString(8)), - } + queueName := testAccGameliftQueuePrefix + acctest.RandString(8) playerLatencyPolicies := gamelift.PlayerLatencyPolicy{ MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(20), PolicyDurationSeconds: aws.Int64(30), } timeoutInSeconds := int64(124) - //uQueueName := getComposedQueueName(fmt.Sprintf("else-%s", rString)) - uDestinations := gamelift.GameSessionQueueDestination{ - DestinationArn: aws.String(acctest.RandString(8)), - } + uQueueName := queueName + "-updated" uPlayerLatencyPolicies := gamelift.PlayerLatencyPolicy{ MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(30), PolicyDurationSeconds: aws.Int64(40), @@ -104,19 +95,14 @@ func TestAccAWSGameliftQueue_basic(t *testing.T) { CheckDestroy: testAccCheckAWSGameliftQueueDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSGameliftQueueBasicConfig(queueName, destinations, + Config: testAccAWSGameliftQueueBasicConfig(queueName, playerLatencyPolicies, timeoutInSeconds), Check: resource.ComposeTestCheckFunc( testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", queueName), resource.TestCheckResourceAttr("aws_gamelift_queue.test", - "destinations.#", - "1"), - - resource.TestCheckResourceAttr("aws_gamelift_queue.test", - "destinations.0", - fmt.Sprintf("%s", *destinations.DestinationArn)), + "destinations.#", "0"), resource.TestCheckResourceAttr("aws_gamelift_queue.test", "player_latency_policies.#", "1"), @@ -134,18 +120,14 @@ func TestAccAWSGameliftQueue_basic(t *testing.T) { ), }, { - Config: testAccAWSGameliftQueueBasicConfig(queueName, uDestinations, + Config: testAccAWSGameliftQueueBasicConfig(uQueueName, uPlayerLatencyPolicies, uTimeoutInSeconds), Check: resource.ComposeTestCheckFunc( testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", queueName), + resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", uQueueName), resource.TestCheckResourceAttr("aws_gamelift_queue.test", - "destinations.#", "1"), - - resource.TestCheckResourceAttr("aws_gamelift_queue.test", - "destinations.0", - fmt.Sprintf("%s", *uDestinations.DestinationArn)), + "destinations.#", "0"), resource.TestCheckResourceAttr("aws_gamelift_queue.test", "player_latency_policies.#", "1"), @@ -222,6 +204,9 @@ func testAccCheckAWSGameliftQueueDestroy(s *terraform.State) error { Names: aws.StringSlice([]string{name}), Limit: &limit, }) + if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { + continue + } if err != nil { return err } @@ -236,29 +221,23 @@ func testAccCheckAWSGameliftQueueDestroy(s *terraform.State) error { } return nil - } -func testAccAWSGameliftQueueBasicConfig(queueName string, destinations gamelift.GameSessionQueueDestination, +func testAccAWSGameliftQueueBasicConfig(queueName string, playerLatencyPolicies gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { return fmt.Sprintf(` resource "aws_gamelift_queue" "test" { name = "%s" - destinations = ["%s"] + destinations = [] player_latency_policies { - maximum_individual_player_latency_milliseconds = %d - policy_duration_seconds = %d + maximum_individual_player_latency_milliseconds = %d + policy_duration_seconds = %d } timeout_in_seconds = %d } `, queueName, - *destinations.DestinationArn, *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds, *playerLatencyPolicies.PolicyDurationSeconds, timeoutInSeconds) } - -func getComposedQueueName(name string) string { - return fmt.Sprintf("%s%s", testAccGameliftQueuePrefix, name) -} From afcb3d191b671bc2d1c743eee374fb17a6069173 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 13:25:30 +0200 Subject: [PATCH 05/15] Rename gamelift_queue to gamelift_session_queue --- aws/provider.go | 2 +- ...=> resource_aws_gamelift_session_queue.go} | 22 +++---- ...source_aws_gamelift_session_queue_test.go} | 60 +++++++++---------- 3 files changed, 42 insertions(+), 42 deletions(-) rename aws/{resource_aws_gamelift_queue.go => resource_aws_gamelift_session_queue.go} (89%) rename aws/{resource_aws_gamelift_queue_test.go => resource_aws_gamelift_session_queue_test.go} (72%) diff --git a/aws/provider.go b/aws/provider.go index 9dfc4e93dbdd..71de1b8f8076 100644 --- a/aws/provider.go +++ b/aws/provider.go @@ -442,7 +442,7 @@ func Provider() terraform.ResourceProvider { "aws_gamelift_alias": resourceAwsGameliftAlias(), "aws_gamelift_build": resourceAwsGameliftBuild(), "aws_gamelift_fleet": resourceAwsGameliftFleet(), - "aws_gamelift_queue": resourceAwsGameliftQueue(), + "aws_gamelift_session_queue": resourceAwsGameliftSessionQueue(), "aws_glacier_vault": resourceAwsGlacierVault(), "aws_glue_catalog_database": resourceAwsGlueCatalogDatabase(), "aws_glue_catalog_table": resourceAwsGlueCatalogTable(), diff --git a/aws/resource_aws_gamelift_queue.go b/aws/resource_aws_gamelift_session_queue.go similarity index 89% rename from aws/resource_aws_gamelift_queue.go rename to aws/resource_aws_gamelift_session_queue.go index 6d5f14c52d43..58f33b90f61c 100644 --- a/aws/resource_aws_gamelift_queue.go +++ b/aws/resource_aws_gamelift_session_queue.go @@ -9,12 +9,12 @@ import ( "log" ) -func resourceAwsGameliftQueue() *schema.Resource { +func resourceAwsGameliftSessionQueue() *schema.Resource { return &schema.Resource{ - Create: resourceAwsGameliftQueueCreate, - Read: resourceAwsGameliftQueueRead, - Update: resourceAwsGameliftQueueUpdate, - Delete: resourceAwsGameliftQueueDelete, + Create: resourceAwsGameliftSessionQueueCreate, + Read: resourceAwsGameliftSessionQueueRead, + Update: resourceAwsGameliftSessionQueueUpdate, + Delete: resourceAwsGameliftSessionQueueDelete, Schema: map[string]*schema.Schema{ "destinations": { @@ -58,7 +58,7 @@ func resourceAwsGameliftQueue() *schema.Resource { } } -func resourceAwsGameliftQueueCreate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftSessionQueueCreate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn input := gamelift.CreateGameSessionQueueInput{ @@ -79,10 +79,10 @@ func resourceAwsGameliftQueueCreate(d *schema.ResourceData, meta interface{}) er d.SetId(*out.GameSessionQueue.GameSessionQueueArn) d.Set("name", out.GameSessionQueue.Name) - return resourceAwsGameliftQueueRead(d, meta) + return resourceAwsGameliftSessionQueueRead(d, meta) } -func resourceAwsGameliftQueueRead(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftSessionQueueRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Get("name")) limit := int64(1) @@ -134,7 +134,7 @@ func flattenGameliftPlayerLatencyPolicies(playerLatencyPolicies []*gamelift.Play return lst } -func resourceAwsGameliftQueueUpdate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftSessionQueueUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) @@ -153,10 +153,10 @@ func resourceAwsGameliftQueueUpdate(d *schema.ResourceData, meta interface{}) er return err } - return resourceAwsGameliftQueueRead(d, meta) + return resourceAwsGameliftSessionQueueRead(d, meta) } -func resourceAwsGameliftQueueDelete(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftSessionQueueDelete(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) log.Printf("[INFO] Deleting Gamelift Session Queue: %s", name) diff --git a/aws/resource_aws_gamelift_queue_test.go b/aws/resource_aws_gamelift_session_queue_test.go similarity index 72% rename from aws/resource_aws_gamelift_queue_test.go rename to aws/resource_aws_gamelift_session_queue_test.go index 6562a33f812a..135c3f12a191 100644 --- a/aws/resource_aws_gamelift_queue_test.go +++ b/aws/resource_aws_gamelift_session_queue_test.go @@ -13,16 +13,16 @@ import ( "strings" ) -const testAccGameliftQueuePrefix = "tfAccQueue-" +const testAccGameliftSessionQueuePrefix = "tfAccQueue-" func init() { - resource.AddTestSweepers("aws_gamelift_queue", &resource.Sweeper{ - Name: "aws_gamelift_queue", - F: testSweepGameliftQueue, + resource.AddTestSweepers("aws_gamelift_session_queue", &resource.Sweeper{ + Name: "aws_gamelift_session_queue", + F: testSweepGameliftSessionQueue, }) } -func testSweepGameliftQueue(region string) error { +func testSweepGameliftSessionQueue(region string) error { client, err := sharedClientForRegion(region) if err != nil { return fmt.Errorf("error getting client: %s", err) @@ -47,7 +47,7 @@ func testSweepGameliftQueue(region string) error { log.Printf("[INFO] Found %d Gamelift Session Queue", len(out.GameSessionQueues)) for _, queue := range out.GameSessionQueues { - if !strings.HasPrefix(*queue.Name, testAccGameliftQueuePrefix) { + if !strings.HasPrefix(*queue.Name, testAccGameliftSessionQueuePrefix) { continue } @@ -72,10 +72,10 @@ func testSweepGameliftQueue(region string) error { return nil } -func TestAccAWSGameliftQueue_basic(t *testing.T) { +func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { var conf gamelift.GameSessionQueue - queueName := testAccGameliftQueuePrefix + acctest.RandString(8) + queueName := testAccGameliftSessionQueuePrefix + acctest.RandString(8) playerLatencyPolicies := gamelift.PlayerLatencyPolicy{ MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(20), PolicyDurationSeconds: aws.Int64(30), @@ -92,55 +92,55 @@ func TestAccAWSGameliftQueue_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, - CheckDestroy: testAccCheckAWSGameliftQueueDestroy, + CheckDestroy: testAccCheckAWSGameliftSessionQueueDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSGameliftQueueBasicConfig(queueName, + Config: testAccAWSGameliftSessionQueueBasicConfig(queueName, playerLatencyPolicies, timeoutInSeconds), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", queueName), + testAccCheckAWSGameliftSessionQueueExists("aws_gamelift_session_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "name", queueName), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "destinations.#", "0"), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.#", "1"), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.0.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.0.policy_duration_seconds", fmt.Sprintf("%d", *playerLatencyPolicies.PolicyDurationSeconds)), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", timeoutInSeconds)), ), }, { - Config: testAccAWSGameliftQueueBasicConfig(uQueueName, + Config: testAccAWSGameliftSessionQueueBasicConfig(uQueueName, uPlayerLatencyPolicies, uTimeoutInSeconds), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSGameliftQueueExists("aws_gamelift_queue.test", &conf), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", "name", uQueueName), + testAccCheckAWSGameliftSessionQueueExists("aws_gamelift_session_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "name", uQueueName), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "destinations.#", "0"), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.#", "1"), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.0.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *uPlayerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "player_latency_policies.0.policy_duration_seconds", fmt.Sprintf("%d", *uPlayerLatencyPolicies.PolicyDurationSeconds)), - resource.TestCheckResourceAttr("aws_gamelift_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", uTimeoutInSeconds)), ), }, @@ -148,7 +148,7 @@ func TestAccAWSGameliftQueue_basic(t *testing.T) { }) } -func testAccCheckAWSGameliftQueueExists(n string, res *gamelift.GameSessionQueue) resource.TestCheckFunc { +func testAccCheckAWSGameliftSessionQueueExists(n string, res *gamelift.GameSessionQueue) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -190,11 +190,11 @@ func testAccCheckAWSGameliftQueueExists(n string, res *gamelift.GameSessionQueue } } -func testAccCheckAWSGameliftQueueDestroy(s *terraform.State) error { +func testAccCheckAWSGameliftSessionQueueDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).gameliftconn for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_gamelift_queue" { + if rs.Type != "aws_gamelift_session_queue" { continue } @@ -223,10 +223,10 @@ func testAccCheckAWSGameliftQueueDestroy(s *terraform.State) error { return nil } -func testAccAWSGameliftQueueBasicConfig(queueName string, +func testAccAWSGameliftSessionQueueBasicConfig(queueName string, playerLatencyPolicies gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { return fmt.Sprintf(` -resource "aws_gamelift_queue" "test" { +resource "aws_gamelift_session_queue" "test" { name = "%s" destinations = [] player_latency_policies { From 5ad407bbb4f0fc131dfc299fe2cf42cbd982ecf9 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 14:11:14 +0200 Subject: [PATCH 06/15] Correct aws_gamelift_session_queue.player_latency_policy --- aws/resource_aws_gamelift_session_queue.go | 10 +-- ...esource_aws_gamelift_session_queue_test.go | 70 +++++++++++++------ 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/aws/resource_aws_gamelift_session_queue.go b/aws/resource_aws_gamelift_session_queue.go index 58f33b90f61c..26d0e3ed4f16 100644 --- a/aws/resource_aws_gamelift_session_queue.go +++ b/aws/resource_aws_gamelift_session_queue.go @@ -28,7 +28,7 @@ func resourceAwsGameliftSessionQueue() *schema.Resource { ForceNew: true, ValidateFunc: validation.StringLenBetween(1, 1024), }, - "player_latency_policies": { + "player_latency_policy": { Type: schema.TypeList, Optional: true, Elem: &schema.Resource{ @@ -64,7 +64,7 @@ func resourceAwsGameliftSessionQueueCreate(d *schema.ResourceData, meta interfac input := gamelift.CreateGameSessionQueueInput{ Name: aws.String(d.Get("name").(string)), Destinations: expandGameliftGameSessionQueueDestinations(d.Get("destinations").([]interface{})), - PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policy").([]interface{})), TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), } if v, ok := d.GetOk("name"); ok { @@ -115,8 +115,8 @@ func resourceAwsGameliftSessionQueueRead(d *schema.ResourceData, meta interface{ d.Set("name", sessionQueue.Name) d.Set("timeout_in_seconds", sessionQueue.TimeoutInSeconds) d.Set("destinations", sessionQueue.Destinations) - if err := d.Set("player_latency_policies", flattenGameliftPlayerLatencyPolicies(sessionQueue.PlayerLatencyPolicies)); err != nil { - return fmt.Errorf("error setting player_latency_policies: %s", err) + if err := d.Set("player_latency_policy", flattenGameliftPlayerLatencyPolicies(sessionQueue.PlayerLatencyPolicies)); err != nil { + return fmt.Errorf("error setting player_latency_policy: %s", err) } return nil @@ -144,7 +144,7 @@ func resourceAwsGameliftSessionQueueUpdate(d *schema.ResourceData, meta interfac input := gamelift.UpdateGameSessionQueueInput{ Name: aws.String(d.Get("name").(string)), Destinations: expandGameliftGameSessionQueueDestinations(d.Get("destinations").([]interface{})), - PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policies").([]interface{})), + PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policy").([]interface{})), TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), } diff --git a/aws/resource_aws_gamelift_session_queue_test.go b/aws/resource_aws_gamelift_session_queue_test.go index 135c3f12a191..a7a35853a41b 100644 --- a/aws/resource_aws_gamelift_session_queue_test.go +++ b/aws/resource_aws_gamelift_session_queue_test.go @@ -76,16 +76,28 @@ func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { var conf gamelift.GameSessionQueue queueName := testAccGameliftSessionQueuePrefix + acctest.RandString(8) - playerLatencyPolicies := gamelift.PlayerLatencyPolicy{ - MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(20), - PolicyDurationSeconds: aws.Int64(30), + playerLatencyPolicies := []gamelift.PlayerLatencyPolicy{ + { + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(100), + PolicyDurationSeconds: aws.Int64(5), + }, + { + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(200), + PolicyDurationSeconds: nil, + }, } timeoutInSeconds := int64(124) uQueueName := queueName + "-updated" - uPlayerLatencyPolicies := gamelift.PlayerLatencyPolicy{ - MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(30), - PolicyDurationSeconds: aws.Int64(40), + uPlayerLatencyPolicies := []gamelift.PlayerLatencyPolicy{ + { + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(150), + PolicyDurationSeconds: aws.Int64(10), + }, + { + MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(250), + PolicyDurationSeconds: nil, + }, } uTimeoutInSeconds := int64(600) @@ -105,15 +117,22 @@ func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { "destinations.#", "0"), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.#", "1"), + "player_latency_policy.#", "2"), + + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + "player_latency_policy.0.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *playerLatencyPolicies[0].MaximumIndividualPlayerLatencyMilliseconds)), + + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + "player_latency_policy.0.policy_duration_seconds", + fmt.Sprintf("%d", *playerLatencyPolicies[0].PolicyDurationSeconds)), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.0.maximum_individual_player_latency_milliseconds", - fmt.Sprintf("%d", *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), + "player_latency_policy.1.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *playerLatencyPolicies[1].MaximumIndividualPlayerLatencyMilliseconds)), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.0.policy_duration_seconds", - fmt.Sprintf("%d", *playerLatencyPolicies.PolicyDurationSeconds)), + "player_latency_policy.1.policy_duration_seconds", "0"), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", timeoutInSeconds)), @@ -130,15 +149,22 @@ func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { "destinations.#", "0"), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.#", "1"), + "player_latency_policy.#", "2"), + + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + "player_latency_policy.0.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *uPlayerLatencyPolicies[0].MaximumIndividualPlayerLatencyMilliseconds)), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.0.maximum_individual_player_latency_milliseconds", - fmt.Sprintf("%d", *uPlayerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds)), + "player_latency_policy.0.policy_duration_seconds", + fmt.Sprintf("%d", *uPlayerLatencyPolicies[0].PolicyDurationSeconds)), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", - "player_latency_policies.0.policy_duration_seconds", - fmt.Sprintf("%d", *uPlayerLatencyPolicies.PolicyDurationSeconds)), + "player_latency_policy.1.maximum_individual_player_latency_milliseconds", + fmt.Sprintf("%d", *uPlayerLatencyPolicies[1].MaximumIndividualPlayerLatencyMilliseconds)), + + resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + "player_latency_policy.1.policy_duration_seconds", "0"), resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", uTimeoutInSeconds)), @@ -224,20 +250,24 @@ func testAccCheckAWSGameliftSessionQueueDestroy(s *terraform.State) error { } func testAccAWSGameliftSessionQueueBasicConfig(queueName string, - playerLatencyPolicies gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { + playerLatencyPolicies []gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { return fmt.Sprintf(` resource "aws_gamelift_session_queue" "test" { name = "%s" destinations = [] - player_latency_policies { + player_latency_policy { maximum_individual_player_latency_milliseconds = %d policy_duration_seconds = %d } + player_latency_policy { + maximum_individual_player_latency_milliseconds = %d + } timeout_in_seconds = %d } `, queueName, - *playerLatencyPolicies.MaximumIndividualPlayerLatencyMilliseconds, - *playerLatencyPolicies.PolicyDurationSeconds, + *playerLatencyPolicies[0].MaximumIndividualPlayerLatencyMilliseconds, + *playerLatencyPolicies[0].PolicyDurationSeconds, + *playerLatencyPolicies[1].MaximumIndividualPlayerLatencyMilliseconds, timeoutInSeconds) } From 85f1ce3e7ab595404ca11cdc1b95a44600ca86ac Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 14:21:35 +0200 Subject: [PATCH 07/15] aws_gamelift_session_queue.timeout_in_seconds validation --- aws/resource_aws_gamelift_session_queue.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aws/resource_aws_gamelift_session_queue.go b/aws/resource_aws_gamelift_session_queue.go index 26d0e3ed4f16..48c93dcef0a4 100644 --- a/aws/resource_aws_gamelift_session_queue.go +++ b/aws/resource_aws_gamelift_session_queue.go @@ -47,8 +47,9 @@ func resourceAwsGameliftSessionQueue() *schema.Resource { }, }, "timeout_in_seconds": { - Type: schema.TypeInt, - Optional: true, + Type: schema.TypeInt, + Optional: true, + ValidateFunc: validation.IntBetween(10, 600), }, "arn": { Type: schema.TypeString, From 050503a3702990a7a92b00f74facb9b466fea9b7 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 14:31:36 +0200 Subject: [PATCH 08/15] aws_gamelift_session_queue documentation --- .../r/gamelift_session_queue.html.markdown | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 website/docs/r/gamelift_session_queue.html.markdown diff --git a/website/docs/r/gamelift_session_queue.html.markdown b/website/docs/r/gamelift_session_queue.html.markdown new file mode 100644 index 000000000000..c447bfba7593 --- /dev/null +++ b/website/docs/r/gamelift_session_queue.html.markdown @@ -0,0 +1,57 @@ +--- +layout: "aws" +page_title: "AWS: aws_gamelift_session_queue" +sidebar_current: "docs-aws-resource-gamelift-session-queue" +description: |- + Provides a Gamelift Session Queue resource. +--- + +# aws_gamelift_session_queue + +Provides an Gamelift Session Queue resource. + +## Example Usage + +```hcl +resource "aws_gamelift_session_queue" "test" { + name = "example-session-queue" + destinations = [ + "${aws_gamelift_fleet.us_west_2_fleet.arn}", + "${aws_gamelift_fleet.eu_central_1_fleet.arn}", + ] + player_latency_policy { + maximum_individual_player_latency_milliseconds = 100 + policy_duration_seconds = 5 + } + player_latency_policy { + maximum_individual_player_latency_milliseconds = 200 + } + timeout_in_seconds = 60 +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) Name of the session queue. +* `timeout_in_seconds` - (Required) Maximum time a game session request can remain in the queue. +* `destinations` - (Optional) List of fleet/alias ARNs used by session queue for placing game sessions. +* `player_latency_policy` - (Optional) One or more policies used to choose fleet based on player latency. See below. + +### Nested Fields + +#### `player_latency_policy` + +* `maximum_individual_player_latency_milliseconds` - (Required) Maximum latency value that is allowed for any player. +* `policy_duration_seconds` - (Optional) Length of time that the policy is enforced while placing a new game session. Absence of value for this attribute means that the policy is enforced until the queue times out. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `arn` - Session Queue ARN. + +## Import + +Gamelift Session Queues cannot be imported at this time. From 1f4abcb0ff09b0e95e4b21efbdbc8d0011322482 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 14:38:19 +0200 Subject: [PATCH 09/15] Rename aws_gamelift_session_queue -> aws_gamelift_game_session_queue --- aws/provider.go | 2 +- ...source_aws_gamelift_game_session_queue.go} | 22 +++--- ...e_aws_gamelift_game_session_queue_test.go} | 68 +++++++++---------- ...gamelift_game_session_queue.html.markdown} | 12 ++-- 4 files changed, 52 insertions(+), 52 deletions(-) rename aws/{resource_aws_gamelift_session_queue.go => resource_aws_gamelift_game_session_queue.go} (88%) rename aws/{resource_aws_gamelift_session_queue_test.go => resource_aws_gamelift_game_session_queue_test.go} (71%) rename website/docs/r/{gamelift_session_queue.html.markdown => gamelift_game_session_queue.html.markdown} (84%) diff --git a/aws/provider.go b/aws/provider.go index 71de1b8f8076..1c1981ede72e 100644 --- a/aws/provider.go +++ b/aws/provider.go @@ -442,7 +442,7 @@ func Provider() terraform.ResourceProvider { "aws_gamelift_alias": resourceAwsGameliftAlias(), "aws_gamelift_build": resourceAwsGameliftBuild(), "aws_gamelift_fleet": resourceAwsGameliftFleet(), - "aws_gamelift_session_queue": resourceAwsGameliftSessionQueue(), + "aws_gamelift_game_session_queue": resourceAwsGameliftGameSessionQueue(), "aws_glacier_vault": resourceAwsGlacierVault(), "aws_glue_catalog_database": resourceAwsGlueCatalogDatabase(), "aws_glue_catalog_table": resourceAwsGlueCatalogTable(), diff --git a/aws/resource_aws_gamelift_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go similarity index 88% rename from aws/resource_aws_gamelift_session_queue.go rename to aws/resource_aws_gamelift_game_session_queue.go index 48c93dcef0a4..caaa39ace1e2 100644 --- a/aws/resource_aws_gamelift_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -9,12 +9,12 @@ import ( "log" ) -func resourceAwsGameliftSessionQueue() *schema.Resource { +func resourceAwsGameliftGameSessionQueue() *schema.Resource { return &schema.Resource{ - Create: resourceAwsGameliftSessionQueueCreate, - Read: resourceAwsGameliftSessionQueueRead, - Update: resourceAwsGameliftSessionQueueUpdate, - Delete: resourceAwsGameliftSessionQueueDelete, + Create: resourceAwsGameliftGameSessionQueueCreate, + Read: resourceAwsGameliftGameSessionQueueRead, + Update: resourceAwsGameliftGameSessionQueueUpdate, + Delete: resourceAwsGameliftGameSessionQueueDelete, Schema: map[string]*schema.Schema{ "destinations": { @@ -59,7 +59,7 @@ func resourceAwsGameliftSessionQueue() *schema.Resource { } } -func resourceAwsGameliftSessionQueueCreate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftGameSessionQueueCreate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn input := gamelift.CreateGameSessionQueueInput{ @@ -80,10 +80,10 @@ func resourceAwsGameliftSessionQueueCreate(d *schema.ResourceData, meta interfac d.SetId(*out.GameSessionQueue.GameSessionQueueArn) d.Set("name", out.GameSessionQueue.Name) - return resourceAwsGameliftSessionQueueRead(d, meta) + return resourceAwsGameliftGameSessionQueueRead(d, meta) } -func resourceAwsGameliftSessionQueueRead(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Get("name")) limit := int64(1) @@ -135,7 +135,7 @@ func flattenGameliftPlayerLatencyPolicies(playerLatencyPolicies []*gamelift.Play return lst } -func resourceAwsGameliftSessionQueueUpdate(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftGameSessionQueueUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) @@ -154,10 +154,10 @@ func resourceAwsGameliftSessionQueueUpdate(d *schema.ResourceData, meta interfac return err } - return resourceAwsGameliftSessionQueueRead(d, meta) + return resourceAwsGameliftGameSessionQueueRead(d, meta) } -func resourceAwsGameliftSessionQueueDelete(d *schema.ResourceData, meta interface{}) error { +func resourceAwsGameliftGameSessionQueueDelete(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn name := d.Get("name").(string) log.Printf("[INFO] Deleting Gamelift Session Queue: %s", name) diff --git a/aws/resource_aws_gamelift_session_queue_test.go b/aws/resource_aws_gamelift_game_session_queue_test.go similarity index 71% rename from aws/resource_aws_gamelift_session_queue_test.go rename to aws/resource_aws_gamelift_game_session_queue_test.go index a7a35853a41b..7edbc4891544 100644 --- a/aws/resource_aws_gamelift_session_queue_test.go +++ b/aws/resource_aws_gamelift_game_session_queue_test.go @@ -13,16 +13,16 @@ import ( "strings" ) -const testAccGameliftSessionQueuePrefix = "tfAccQueue-" +const testAccGameliftGameSessionQueuePrefix = "tfAccQueue-" func init() { - resource.AddTestSweepers("aws_gamelift_session_queue", &resource.Sweeper{ - Name: "aws_gamelift_session_queue", - F: testSweepGameliftSessionQueue, + resource.AddTestSweepers("aws_gamelift_game_session_queue", &resource.Sweeper{ + Name: "aws_gamelift_game_session_queue", + F: testSweepGameliftGameSessionQueue, }) } -func testSweepGameliftSessionQueue(region string) error { +func testSweepGameliftGameSessionQueue(region string) error { client, err := sharedClientForRegion(region) if err != nil { return fmt.Errorf("error getting client: %s", err) @@ -47,7 +47,7 @@ func testSweepGameliftSessionQueue(region string) error { log.Printf("[INFO] Found %d Gamelift Session Queue", len(out.GameSessionQueues)) for _, queue := range out.GameSessionQueues { - if !strings.HasPrefix(*queue.Name, testAccGameliftSessionQueuePrefix) { + if !strings.HasPrefix(*queue.Name, testAccGameliftGameSessionQueuePrefix) { continue } @@ -72,10 +72,10 @@ func testSweepGameliftSessionQueue(region string) error { return nil } -func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { +func TestAccAWSGameliftGameSessionQueue_basic(t *testing.T) { var conf gamelift.GameSessionQueue - queueName := testAccGameliftSessionQueuePrefix + acctest.RandString(8) + queueName := testAccGameliftGameSessionQueuePrefix + acctest.RandString(8) playerLatencyPolicies := []gamelift.PlayerLatencyPolicy{ { MaximumIndividualPlayerLatencyMilliseconds: aws.Int64(100), @@ -104,69 +104,69 @@ func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, - CheckDestroy: testAccCheckAWSGameliftSessionQueueDestroy, + CheckDestroy: testAccCheckAWSGameliftGameSessionQueueDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSGameliftSessionQueueBasicConfig(queueName, + Config: testAccAWSGameliftGameSessionQueueBasicConfig(queueName, playerLatencyPolicies, timeoutInSeconds), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSGameliftSessionQueueExists("aws_gamelift_session_queue.test", &conf), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "name", queueName), + testAccCheckAWSGameliftGameSessionQueueExists("aws_gamelift_game_session_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "name", queueName), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "destinations.#", "0"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.#", "2"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.0.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *playerLatencyPolicies[0].MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.0.policy_duration_seconds", fmt.Sprintf("%d", *playerLatencyPolicies[0].PolicyDurationSeconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.1.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *playerLatencyPolicies[1].MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.1.policy_duration_seconds", "0"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", timeoutInSeconds)), ), }, { - Config: testAccAWSGameliftSessionQueueBasicConfig(uQueueName, + Config: testAccAWSGameliftGameSessionQueueBasicConfig(uQueueName, uPlayerLatencyPolicies, uTimeoutInSeconds), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSGameliftSessionQueueExists("aws_gamelift_session_queue.test", &conf), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", "name", uQueueName), + testAccCheckAWSGameliftGameSessionQueueExists("aws_gamelift_game_session_queue.test", &conf), + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "name", uQueueName), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "destinations.#", "0"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.#", "2"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.0.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *uPlayerLatencyPolicies[0].MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.0.policy_duration_seconds", fmt.Sprintf("%d", *uPlayerLatencyPolicies[0].PolicyDurationSeconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.1.maximum_individual_player_latency_milliseconds", fmt.Sprintf("%d", *uPlayerLatencyPolicies[1].MaximumIndividualPlayerLatencyMilliseconds)), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "player_latency_policy.1.policy_duration_seconds", "0"), - resource.TestCheckResourceAttr("aws_gamelift_session_queue.test", + resource.TestCheckResourceAttr("aws_gamelift_game_session_queue.test", "timeout_in_seconds", fmt.Sprintf("%d", uTimeoutInSeconds)), ), }, @@ -174,7 +174,7 @@ func TestAccAWSGameliftSessionQueue_basic(t *testing.T) { }) } -func testAccCheckAWSGameliftSessionQueueExists(n string, res *gamelift.GameSessionQueue) resource.TestCheckFunc { +func testAccCheckAWSGameliftGameSessionQueueExists(n string, res *gamelift.GameSessionQueue) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -216,11 +216,11 @@ func testAccCheckAWSGameliftSessionQueueExists(n string, res *gamelift.GameSessi } } -func testAccCheckAWSGameliftSessionQueueDestroy(s *terraform.State) error { +func testAccCheckAWSGameliftGameSessionQueueDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).gameliftconn for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_gamelift_session_queue" { + if rs.Type != "aws_gamelift_game_session_queue" { continue } @@ -249,10 +249,10 @@ func testAccCheckAWSGameliftSessionQueueDestroy(s *terraform.State) error { return nil } -func testAccAWSGameliftSessionQueueBasicConfig(queueName string, +func testAccAWSGameliftGameSessionQueueBasicConfig(queueName string, playerLatencyPolicies []gamelift.PlayerLatencyPolicy, timeoutInSeconds int64) string { return fmt.Sprintf(` -resource "aws_gamelift_session_queue" "test" { +resource "aws_gamelift_game_session_queue" "test" { name = "%s" destinations = [] player_latency_policy { diff --git a/website/docs/r/gamelift_session_queue.html.markdown b/website/docs/r/gamelift_game_session_queue.html.markdown similarity index 84% rename from website/docs/r/gamelift_session_queue.html.markdown rename to website/docs/r/gamelift_game_session_queue.html.markdown index c447bfba7593..b471d8437e1b 100644 --- a/website/docs/r/gamelift_session_queue.html.markdown +++ b/website/docs/r/gamelift_game_session_queue.html.markdown @@ -1,19 +1,19 @@ --- layout: "aws" -page_title: "AWS: aws_gamelift_session_queue" +page_title: "AWS: aws_gamelift_game_session_queue" sidebar_current: "docs-aws-resource-gamelift-session-queue" description: |- - Provides a Gamelift Session Queue resource. + Provides a Gamelift Game Session Queue resource. --- -# aws_gamelift_session_queue +# aws_gamelift_game_session_queue -Provides an Gamelift Session Queue resource. +Provides an Gamelift Game Session Queue resource. ## Example Usage ```hcl -resource "aws_gamelift_session_queue" "test" { +resource "aws_gamelift_game_session_queue" "test" { name = "example-session-queue" destinations = [ "${aws_gamelift_fleet.us_west_2_fleet.arn}", @@ -50,7 +50,7 @@ The following arguments are supported: In addition to all arguments above, the following attributes are exported: -* `arn` - Session Queue ARN. +* `arn` - Game Session Queue ARN. ## Import From c5bcae64bc81056cd5446428bbe620501833e25c Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 14:59:08 +0200 Subject: [PATCH 10/15] Add gamelift_game_session_queue doc to sidebar --- website/aws.erb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/aws.erb b/website/aws.erb index de08b5beb4c1..d65f475bdfcc 100644 --- a/website/aws.erb +++ b/website/aws.erb @@ -1283,6 +1283,9 @@ > aws_gamelift_fleet + > + aws_gamelift_game_session_queue + From 90371ddf2e2080fbeff6f48efa3c497d084bf361 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Fri, 2 Nov 2018 15:44:05 +0200 Subject: [PATCH 11/15] Fix gamelift_game_session_queue.name max length --- aws/resource_aws_gamelift_game_session_queue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/resource_aws_gamelift_game_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go index caaa39ace1e2..f4a2446e7c25 100644 --- a/aws/resource_aws_gamelift_game_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -26,7 +26,7 @@ func resourceAwsGameliftGameSessionQueue() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validation.StringLenBetween(1, 1024), + ValidateFunc: validation.StringLenBetween(1, 128), }, "player_latency_policy": { Type: schema.TypeList, From 3c3e1369697e14c180ca03bdc1048d800b7057dd Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Sat, 3 Nov 2018 09:21:17 +0200 Subject: [PATCH 12/15] gamelift_game_session_queue: Remove redundant second Name assignment --- aws/resource_aws_gamelift_game_session_queue.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/aws/resource_aws_gamelift_game_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go index f4a2446e7c25..37c6f86b90ab 100644 --- a/aws/resource_aws_gamelift_game_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -68,9 +68,6 @@ func resourceAwsGameliftGameSessionQueueCreate(d *schema.ResourceData, meta inte PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policy").([]interface{})), TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), } - if v, ok := d.GetOk("name"); ok { - input.Name = aws.String(v.(string)) - } log.Printf("[INFO] Creating Gamelift Session Queue: %s", input) out, err := conn.CreateGameSessionQueue(&input) if err != nil { From 6a33f46af92debbf43a0fc37a547cd6871c6e1c0 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Wed, 14 Nov 2018 06:47:19 +0200 Subject: [PATCH 13/15] Feedback fixes --- ...esource_aws_gamelift_game_session_queue.go | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/aws/resource_aws_gamelift_game_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go index 37c6f86b90ab..5c494b62e6c5 100644 --- a/aws/resource_aws_gamelift_game_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -71,11 +71,10 @@ func resourceAwsGameliftGameSessionQueueCreate(d *schema.ResourceData, meta inte log.Printf("[INFO] Creating Gamelift Session Queue: %s", input) out, err := conn.CreateGameSessionQueue(&input) if err != nil { - return err + return fmt.Errorf("error creating Gamelift Game Session Queue: %s", err) } d.SetId(*out.GameSessionQueue.GameSessionQueueArn) - d.Set("name", out.GameSessionQueue.Name) return resourceAwsGameliftGameSessionQueueRead(d, meta) } @@ -94,7 +93,7 @@ func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interf d.SetId("") return nil } - return err + return fmt.Errorf("error reading Gamelift Game Session Queue (%s): %s", d.Id(), err) } sessionQueues := out.GameSessionQueues @@ -112,7 +111,9 @@ func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interf d.Set("arn", sessionQueue.GameSessionQueueArn) d.Set("name", sessionQueue.Name) d.Set("timeout_in_seconds", sessionQueue.TimeoutInSeconds) - d.Set("destinations", sessionQueue.Destinations) + if err := d.Set("destinations", flattenGameliftGameSessionQueueDestinations(sessionQueue.Destinations)); err != nil { + return fmt.Errorf("error setting destinations: %s", err) + } if err := d.Set("player_latency_policy", flattenGameliftPlayerLatencyPolicies(sessionQueue.PlayerLatencyPolicies)); err != nil { return fmt.Errorf("error setting player_latency_policy: %s", err) } @@ -120,16 +121,29 @@ func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interf return nil } +func flattenGameliftGameSessionQueueDestinations(destinations []*gamelift.GameSessionQueueDestination) []interface{} { + l := make([]interface{}, 0) + + for _, destination := range destinations { + if destination == nil { + continue + } + l = append(l, aws.StringValue(destination.DestinationArn)) + } + + return l +} + func flattenGameliftPlayerLatencyPolicies(playerLatencyPolicies []*gamelift.PlayerLatencyPolicy) []interface{} { - lst := []interface{}{} + l := make([]interface{}, 0) for _, policy := range playerLatencyPolicies { m := map[string]interface{}{ "maximum_individual_player_latency_milliseconds": aws.Int64Value(policy.MaximumIndividualPlayerLatencyMilliseconds), "policy_duration_seconds": aws.Int64Value(policy.PolicyDurationSeconds), } - lst = append(lst, m) + l = append(l, m) } - return lst + return l } func resourceAwsGameliftGameSessionQueueUpdate(d *schema.ResourceData, meta interface{}) error { @@ -148,7 +162,7 @@ func resourceAwsGameliftGameSessionQueueUpdate(d *schema.ResourceData, meta inte _, err := conn.UpdateGameSessionQueue(&input) if err != nil { - return err + return fmt.Errorf("error updating Gamelift Game Session Queue (%s): %s", d.Id(), err) } return resourceAwsGameliftGameSessionQueueRead(d, meta) From ada80364503805fc01c91f88df2602c0fe444a26 Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Wed, 14 Nov 2018 16:24:12 +0200 Subject: [PATCH 14/15] aws_gamelift_game_session_queue: use name as ID --- ...esource_aws_gamelift_game_session_queue.go | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/aws/resource_aws_gamelift_game_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go index 5c494b62e6c5..21b8f280fa4b 100644 --- a/aws/resource_aws_gamelift_game_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -74,22 +74,22 @@ func resourceAwsGameliftGameSessionQueueCreate(d *schema.ResourceData, meta inte return fmt.Errorf("error creating Gamelift Game Session Queue: %s", err) } - d.SetId(*out.GameSessionQueue.GameSessionQueueArn) + d.SetId(*out.GameSessionQueue.Name) return resourceAwsGameliftGameSessionQueueRead(d, meta) } func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn - log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Get("name")) + log.Printf("[INFO] Describing Gamelift Session Queues: %s", d.Id()) limit := int64(1) out, err := conn.DescribeGameSessionQueues(&gamelift.DescribeGameSessionQueuesInput{ - Names: aws.StringSlice([]string{d.Get("name").(string)}), + Names: aws.StringSlice([]string{d.Id()}), Limit: &limit, }) if err != nil { if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { - log.Printf("[WARN] Gamelift Session Queues (%s) not found, removing from state", d.Get("name")) + log.Printf("[WARN] Gamelift Session Queues (%s) not found, removing from state", d.Id()) d.SetId("") return nil } @@ -98,13 +98,13 @@ func resourceAwsGameliftGameSessionQueueRead(d *schema.ResourceData, meta interf sessionQueues := out.GameSessionQueues if len(sessionQueues) < 1 { - log.Printf("[WARN] Gamelift Session Queue (%s) not found, removing from state", d.Get("name")) + log.Printf("[WARN] Gamelift Session Queue (%s) not found, removing from state", d.Id()) d.SetId("") return nil } if len(sessionQueues) != 1 { return fmt.Errorf("expected exactly 1 Gamelift Session Queues, found %d under %q", - len(sessionQueues), d.Get("name")) + len(sessionQueues), d.Id()) } sessionQueue := sessionQueues[0] @@ -149,12 +149,10 @@ func flattenGameliftPlayerLatencyPolicies(playerLatencyPolicies []*gamelift.Play func resourceAwsGameliftGameSessionQueueUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn - name := d.Get("name").(string) - - log.Printf("[INFO] Updating Gamelift Session Queue: %s", name) + log.Printf("[INFO] Updating Gamelift Session Queue: %s", d.Id()) input := gamelift.UpdateGameSessionQueueInput{ - Name: aws.String(d.Get("name").(string)), + Name: aws.String(d.Id()), Destinations: expandGameliftGameSessionQueueDestinations(d.Get("destinations").([]interface{})), PlayerLatencyPolicies: expandGameliftGameSessionPlayerLatencyPolicies(d.Get("player_latency_policy").([]interface{})), TimeoutInSeconds: aws.Int64(int64(d.Get("timeout_in_seconds").(int))), @@ -170,10 +168,9 @@ func resourceAwsGameliftGameSessionQueueUpdate(d *schema.ResourceData, meta inte func resourceAwsGameliftGameSessionQueueDelete(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).gameliftconn - name := d.Get("name").(string) - log.Printf("[INFO] Deleting Gamelift Session Queue: %s", name) + log.Printf("[INFO] Deleting Gamelift Session Queue: %s", d.Id()) _, err := conn.DeleteGameSessionQueue(&gamelift.DeleteGameSessionQueueInput{ - Name: aws.String(name), + Name: aws.String(d.Id()), }) if isAWSErr(err, gamelift.ErrCodeNotFoundException, "") { return nil From 704805ee958316173a3b67555da92b66019fe54f Mon Sep 17 00:00:00 2001 From: Pavel Platto Date: Wed, 14 Nov 2018 16:28:55 +0200 Subject: [PATCH 15/15] aws_gamelift_game_session_queue: import --- aws/resource_aws_gamelift_game_session_queue.go | 3 +++ aws/resource_aws_gamelift_game_session_queue_test.go | 5 +++++ website/docs/r/gamelift_game_session_queue.html.markdown | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/aws/resource_aws_gamelift_game_session_queue.go b/aws/resource_aws_gamelift_game_session_queue.go index 21b8f280fa4b..9cdfddbbce10 100644 --- a/aws/resource_aws_gamelift_game_session_queue.go +++ b/aws/resource_aws_gamelift_game_session_queue.go @@ -15,6 +15,9 @@ func resourceAwsGameliftGameSessionQueue() *schema.Resource { Read: resourceAwsGameliftGameSessionQueueRead, Update: resourceAwsGameliftGameSessionQueueUpdate, Delete: resourceAwsGameliftGameSessionQueueDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "destinations": { diff --git a/aws/resource_aws_gamelift_game_session_queue_test.go b/aws/resource_aws_gamelift_game_session_queue_test.go index 7edbc4891544..dc4fb43bf145 100644 --- a/aws/resource_aws_gamelift_game_session_queue_test.go +++ b/aws/resource_aws_gamelift_game_session_queue_test.go @@ -170,6 +170,11 @@ func TestAccAWSGameliftGameSessionQueue_basic(t *testing.T) { "timeout_in_seconds", fmt.Sprintf("%d", uTimeoutInSeconds)), ), }, + { + ResourceName: "aws_gamelift_game_session_queue.test", + ImportState: true, + ImportStateVerify: true, + }, }, }) } diff --git a/website/docs/r/gamelift_game_session_queue.html.markdown b/website/docs/r/gamelift_game_session_queue.html.markdown index b471d8437e1b..1e22b56189ed 100644 --- a/website/docs/r/gamelift_game_session_queue.html.markdown +++ b/website/docs/r/gamelift_game_session_queue.html.markdown @@ -54,4 +54,8 @@ In addition to all arguments above, the following attributes are exported: ## Import -Gamelift Session Queues cannot be imported at this time. +Gamelift Game Session Queues can be imported by their `name`, e.g. + +``` +$ terraform import aws_gamelift_game_session_queue.example example +```