Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add devops_runner_registration acc test #141

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions docs/resources/devops_runner_registration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
page_title: "NIFCLOUD: nifcloud_devops_runner_registration"
subcategory: "DevOps with GitLab"
description: |-
Provides a DevOps Runner resource.
---

# nifcloud_devops_runner_registration

Provides a DevOps Runner resource.

## Example Usage

```hcl
resource "nifcloud_devops_runner_registration" "example" {
runner_name = nifcloud_devops_runner.example.name
gitlab_url = "https://gitlab.com/"
parameter_group_name = nifcloud_devops_runner_parameter_group.example.name
token = "glrt-thegitlabrunnertoken"
}
```

## Argument Reference

The following arguments are supported:

* `gitlab_url` - (Required) GitLab URL.
* `parameter_group_name` - (Required) The name of the DevOps Runner parameter group to associate.
* `runner_name` - (Required) The name of the DevOps Runner.
* `token` - (Required) GitLab Runner token.

## Attribute Reference

* `id` - ID of the registration.

## Import

nifcloud_devops_runner_registration can be imported using the `runner_name` and `id`, separated by an underscore ( _ ). All parts are required.

```
$ terraform import nifcloud_devops_runner_registration.example foo_foo-abcde
```
27 changes: 27 additions & 0 deletions examples/devops_runner_registration/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
terraform {
required_providers {
nifcloud = {
source = "nifcloud/nifcloud"
}
}
}

provider "nifcloud" {
region = "jp-east-1"
}

resource "nifcloud_devops_runner_registration" "example" {
runner_name = nifcloud_devops_runner.example.name
gitlab_url = "https://gitlab.com/"
parameter_group_name = nifcloud_devops_runner_parameter_group.example.name
token = "glrt-thegitlabrunnertoken"
}

resource "nifcloud_devops_runner" "example" {
name = "example"
instance_type = "c-small"
}

resource "nifcloud_devops_runner_parameter_group" "example" {
name = "example"
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ require (
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
github.com/hashicorp/terraform-plugin-sdk/v2 v2.27.0
github.com/katbyte/terrafmt v0.4.0
github.com/nifcloud/nifcloud-sdk-go v1.27.0
github.com/nifcloud/nifcloud-sdk-go v1.28.0
github.com/stretchr/testify v1.8.1
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e
golang.org/x/sync v0.1.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -594,8 +594,8 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6Fx
github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nifcloud/nifcloud-sdk-go v1.27.0 h1:1sJDmtVjekMLNs5BOm/t3P3dQmLOB/KXKyD/lJG55BI=
github.com/nifcloud/nifcloud-sdk-go v1.27.0/go.mod h1:+vk7SQl3ed2U4OqEQWmUqW3C/KqtB8VNmbElIbhu2LU=
github.com/nifcloud/nifcloud-sdk-go v1.28.0 h1:D4gCVpCDHZ/McUEjMvgjvbLliRoDnDo9HsNyYT/oHlI=
github.com/nifcloud/nifcloud-sdk-go v1.28.0/go.mod h1:+vk7SQl3ed2U4OqEQWmUqW3C/KqtB8VNmbElIbhu2LU=
github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME=
github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA=
github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
Expand Down
6 changes: 3 additions & 3 deletions nifcloud/acc/devops_runner_parameter_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ func init() {
resource.AddTestSweepers("nifcloud_devops_runner_parameter_group", &resource.Sweeper{
Name: "nifcloud_devops_runner_parameter_group",
F: testSweepDevOpsRunnerParameterGroup,
// Dependencies: []string{
// "nifcloud_devops_runner",
// },
Dependencies: []string{
"nifcloud_devops_runner_registration",
},
})
}

Expand Down
226 changes: 226 additions & 0 deletions nifcloud/acc/devops_runner_registration_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
package acc

import (
"context"
"errors"
"fmt"
"os"
"strings"
"testing"

"github.com/aws/smithy-go"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/nifcloud/nifcloud-sdk-go/nifcloud"
"github.com/nifcloud/nifcloud-sdk-go/service/devopsrunner"
"github.com/nifcloud/nifcloud-sdk-go/service/devopsrunner/types"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/client"
"golang.org/x/sync/errgroup"
)

var devopsGitLabURL = os.Getenv("TF_VAR_devops_gitlab_url")
var devopsRunnerToken = os.Getenv("TF_VAR_devops_runner_token")

func init() {
resource.AddTestSweepers("nifcloud_devops_runner_registration", &resource.Sweeper{
Name: "nifcloud_devops_runner_registration",
F: testSweepDevOpsRunnerRegistration,
})
}

func TestAcc_DevOpsRunnerRegistration(t *testing.T) {
var registration types.Registrations

resourceName := "nifcloud_devops_runner_registration.basic"
randName := prefix + acctest.RandString(10)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: testAccProviderFactory,
CheckDestroy: testAccDevOpsRunnerRegistrationResourceDestroy,
Steps: []resource.TestStep{
{
Config: testAccDevOpsRunnerRegistration(t, "testdata/devops_runner_registration.tf", randName),
Check: resource.ComposeTestCheckFunc(
testAccCheckDevOpsRunnerRegistrationExists(resourceName, &registration),
testAccCheckDevOpsRunnerRegistrationValues(&registration, randName),
resource.TestCheckResourceAttr(resourceName, "runner_name", randName),
resource.TestCheckResourceAttr(resourceName, "gitlab_url", devopsGitLabURL),
resource.TestCheckResourceAttr(resourceName, "parameter_group_name", randName),
resource.TestCheckResourceAttr(resourceName, "token", devopsRunnerToken[5:14]),
),
},
{
Config: testAccDevOpsRunnerRegistration(t, "testdata/devops_runner_registration_update.tf", randName),
Check: resource.ComposeTestCheckFunc(
testAccCheckDevOpsRunnerRegistrationExists(resourceName, &registration),
testAccCheckDevOpsRunnerRegistrationValuesUpdated(&registration, randName),
resource.TestCheckResourceAttr(resourceName, "runner_name", randName),
resource.TestCheckResourceAttr(resourceName, "gitlab_url", devopsGitLabURL),
resource.TestCheckResourceAttr(resourceName, "parameter_group_name", randName+"-upd"),
resource.TestCheckResourceAttr(resourceName, "token", devopsRunnerToken[5:14]),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateIdFunc: testAccDevOpsRunnerRegistrationImportStateIDFunc(resourceName),
ImportStateVerify: true,
},
},
})
}

func testAccDevOpsRunnerRegistration(t *testing.T, fileName, rName string) string {
b, err := os.ReadFile(fileName)
if err != nil {
t.Fatal(err)
}
return fmt.Sprintf(string(b), rName, rName, rName)
}

func testAccCheckDevOpsRunnerRegistrationExists(n string, registration *types.Registrations) resource.TestCheckFunc {
return func(s *terraform.State) error {
saved, ok := s.RootModule().Resources[n]
if !ok {
return fmt.Errorf("no devops runner resource: %s", n)
}

if saved.Primary.Attributes["runner_name"] == "" {
return fmt.Errorf("no devops runner id is set")
}

svc := testAccProvider.Meta().(*client.Client).DevOpsRunner
res, err := svc.ListRunnerRegistrations(context.Background(), &devopsrunner.ListRunnerRegistrationsInput{
RunnerName: nifcloud.String(saved.Primary.Attributes["runner_name"]),
})
if err != nil {
return err
}

if res.Registrations == nil {
return fmt.Errorf("devops runner registrations are not found in cloud: %s", saved.Primary.ID)
}

if nifcloud.ToString(res.Registrations[0].RegistrationId) != saved.Primary.ID {
return fmt.Errorf("devops runner registration is not found in cloud: %s", saved.Primary.ID)
}

*registration = res.Registrations[0]

return nil
}
}

func testAccCheckDevOpsRunnerRegistrationValues(registration *types.Registrations, rName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
if nifcloud.ToString(registration.GitlabUrl) != devopsGitLabURL {
return fmt.Errorf("bad gitlab_url state, expected \"%s\", got: %#v", devopsGitLabURL, nifcloud.ToString(registration.GitlabUrl))
}

if nifcloud.ToString(registration.ParameterGroupName) != rName {
return fmt.Errorf("bad parameter_group_name state, expected \"%s\", got: %#v", rName, nifcloud.ToString(registration.ParameterGroupName))
}

if nifcloud.ToString(registration.Token) != devopsRunnerToken[5:14] {
return fmt.Errorf("bad token state")
}

return nil
}
}

func testAccCheckDevOpsRunnerRegistrationValuesUpdated(registration *types.Registrations, rName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
if nifcloud.ToString(registration.GitlabUrl) != devopsGitLabURL {
return fmt.Errorf("bad gitlab_url state, expected \"%s\", got: %#v", devopsGitLabURL, nifcloud.ToString(registration.GitlabUrl))
}

if nifcloud.ToString(registration.ParameterGroupName) != rName+"-upd" {
return fmt.Errorf("bad parameter_group_name state, expected \"%s\", got: %#v", rName+"-upd", nifcloud.ToString(registration.ParameterGroupName))
}

if nifcloud.ToString(registration.Token) != devopsRunnerToken[5:14] {
return fmt.Errorf("bad token state")
}

return nil
}
}

func testAccDevOpsRunnerRegistrationResourceDestroy(s *terraform.State) error {
svc := testAccProvider.Meta().(*client.Client).DevOpsRunner

for _, rs := range s.RootModule().Resources {
if rs.Type != "nifcloud_devops_runner_registration" {
continue
}

_, err := svc.GetRunner(context.Background(), &devopsrunner.GetRunnerInput{
RunnerName: nifcloud.String(rs.Primary.Attributes["runner_name"]),
})

if err != nil {
var awsErr smithy.APIError
if errors.As(err, &awsErr) && awsErr.ErrorCode() == "Client.InvalidParameterNotFound.Runner" {
return nil
}
return fmt.Errorf("failed GetRunner: %s", err)
}

return fmt.Errorf("devops runner (%s) still exists", rs.Primary.Attributes["runner_name"])
}
return nil
}

func testSweepDevOpsRunnerRegistration(region string) error {
ctx := context.Background()
svc := sharedClientForRegion(region).DevOpsRunner

res, err := svc.ListRunners(ctx, nil)
if err != nil {
return err
}

var sweepRunners []string
for _, r := range res.Runners {
if strings.HasPrefix(nifcloud.ToString(r.RunnerName), prefix) {
sweepRunners = append(sweepRunners, nifcloud.ToString(r.RunnerName))
}
}

eg, ctx := errgroup.WithContext(ctx)
for _, n := range sweepRunners {
runner := n
eg.Go(func() error {
_, err := svc.DeleteRunner(ctx, &devopsrunner.DeleteRunnerInput{
RunnerName: nifcloud.String(runner),
})
return err
})
}
if err := eg.Wait(); err != nil {
return err
}
return nil
}

func testAccDevOpsRunnerRegistrationImportStateIDFunc(resourceName string) resource.ImportStateIdFunc {
return func(s *terraform.State) (string, error) {
rs, ok := s.RootModule().Resources[resourceName]
if !ok {
return "", fmt.Errorf("not found: %s", resourceName)
}

runnerName := rs.Primary.Attributes["runner_name"]
registrationId := rs.Primary.ID

var parts []string
parts = append(parts, runnerName)
parts = append(parts, registrationId)

id := strings.Join(parts, "_")
return id, nil
}
}
33 changes: 33 additions & 0 deletions nifcloud/acc/testdata/devops_runner_registration.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
provider "nifcloud" {
region = "jp-east-1"
}

resource "nifcloud_devops_runner_registration" "basic" {
runner_name = nifcloud_devops_runner.basic.name
gitlab_url = var.devops_gitlab_url
parameter_group_name = nifcloud_devops_runner_parameter_group.basic.name
token = var.devops_runner_token
}

resource "nifcloud_devops_runner" "basic" {
name = "%s"
instance_type = "c-small"
}

resource "nifcloud_devops_runner_parameter_group" "basic" {
name = "%s"
}

resource "nifcloud_devops_runner_parameter_group" "upd" {
name = "%s-upd"
}

variable "devops_gitlab_url" {
description = "test devops GitLab URL"
type = string
}

variable "devops_runner_token" {
description = "test devops runner token"
type = string
}
33 changes: 33 additions & 0 deletions nifcloud/acc/testdata/devops_runner_registration_update.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
provider "nifcloud" {
region = "jp-east-1"
}

resource "nifcloud_devops_runner_registration" "basic" {
runner_name = nifcloud_devops_runner.basic.name
gitlab_url = var.devops_gitlab_url
parameter_group_name = nifcloud_devops_runner_parameter_group.upd.name
token = var.devops_runner_token
}

resource "nifcloud_devops_runner" "basic" {
name = "%s"
instance_type = "c-small"
}

resource "nifcloud_devops_runner_parameter_group" "basic" {
name = "%s"
}

resource "nifcloud_devops_runner_parameter_group" "upd" {
name = "%s-upd"
}

variable "devops_gitlab_url" {
description = "test devops GitLab URL"
type = string
}

variable "devops_runner_token" {
description = "test devops runner token"
type = string
}
Loading
Loading