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

Create devops runner registration #140

Merged
merged 4 commits into from
Oct 2, 2024
Merged
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 registration resource.
---

# nifcloud_devops_runner_registration

Provides a DevOps Runner registration 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
2 changes: 2 additions & 0 deletions nifcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/devops/devopsparametergroup"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/devops/devopsrunner"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/devops/devopsrunnerparametergroup"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/devops/devopsrunnerregistration"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/dns/record"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/dns/zone"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/resources/ess/domaindkim"
Expand Down Expand Up @@ -137,6 +138,7 @@ func Provider() *schema.Provider {
"nifcloud_devops_backup_rule": devopsbackuprule.New(),
"nifcloud_devops_runner": devopsrunner.New(),
"nifcloud_devops_runner_parameter_group": devopsrunnerparametergroup.New(),
"nifcloud_devops_runner_registration": devopsrunnerregistration.New(),
},
}
}
7 changes: 6 additions & 1 deletion nifcloud/resources/devops/devopsrunner/expander.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,16 @@ import (
)

func expandCreateRunnerInput(d *schema.ResourceData) *devopsrunner.CreateRunnerInput {
var concurrent *int32
if v := d.Get("concurrent").(int); v != 0 {
concurrent = nifcloud.Int32(int32(v))
}

return &devopsrunner.CreateRunnerInput{
RunnerName: nifcloud.String(d.Get("name").(string)),
InstanceType: types.InstanceTypeOfCreateRunnerRequest(d.Get("instance_type").(string)),
AvailabilityZone: types.AvailabilityZoneOfCreateRunnerRequest(d.Get("availability_zone").(string)),
Concurrent: nifcloud.Int32(int32(d.Get("concurrent").(int))),
Concurrent: concurrent,
Description: nifcloud.String(d.Get("description").(string)),
NetworkConfig: expandNetworkConfig(d),
}
Expand Down
4 changes: 2 additions & 2 deletions nifcloud/resources/devops/devopsrunner/read.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
func readRunner(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
svc := meta.(*client.Client).DevOpsRunner

runRes, err := svc.GetRunner(ctx, expandGetRunnerInput(d))
res, err := svc.GetRunner(ctx, expandGetRunnerInput(d))
if err != nil {
var awsErr smithy.APIError
if errors.As(err, &awsErr) && awsErr.ErrorCode() == "Client.InvalidParameterNotFound.Runner" {
Expand All @@ -24,7 +24,7 @@ func readRunner(ctx context.Context, d *schema.ResourceData, meta interface{}) d
return diag.FromErr(fmt.Errorf("failed to read a DevOps Runner: %s", err))
}

if err := flatten(d, runRes); err != nil {
if err := flatten(d, res); err != nil {
return diag.FromErr(err)
}

Expand Down
1 change: 1 addition & 0 deletions nifcloud/resources/devops/devopsrunner/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func newSchema() map[string]*schema.Schema {
Type: schema.TypeInt,
Description: "Limits how many jobs can run concurrently, across all registrations.",
Optional: true,
Computed: true,
ValidateFunc: validation.All(
validation.IntBetween(1, 50),
),
Expand Down
36 changes: 36 additions & 0 deletions nifcloud/resources/devops/devopsrunnerregistration/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package devopsrunnerregistration

import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nifcloud/nifcloud-sdk-go/nifcloud"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/client"
)

func createRunnerRegistration(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
svc := meta.(*client.Client).DevOpsRunner

input := expandRegisterRunnerInput(d)

_, err := svc.RegisterRunner(ctx, input)
if err != nil {
return diag.FromErr(fmt.Errorf("failed to register the DevOps Runner to a GitLab instance: %s", err))
}

err = waitUntilRunnerRunning(ctx, d, svc)
if err != nil {
return diag.FromErr(fmt.Errorf("failed to wait for the DevOps Runner to become ready: %s", err))
}

regRes, err := svc.ListRunnerRegistrations(ctx, expandListRunnerRegistrationsInput(d))
if err != nil {
return diag.FromErr(fmt.Errorf("failed to read a list of DevOps Runner registrations: %s", err))
}

d.SetId(nifcloud.ToString(regRes.Registrations[len(regRes.Registrations)-1].RegistrationId))

return readRunnerRegistration(ctx, d, meta)
}
29 changes: 29 additions & 0 deletions nifcloud/resources/devops/devopsrunnerregistration/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package devopsrunnerregistration

import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nifcloud/terraform-provider-nifcloud/nifcloud/client"
)

func deleteRunnerRegistration(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
svc := meta.(*client.Client).DevOpsRunner

input := expandUnregisterRunnerInput(d)

if _, err := svc.UnregisterRunner(ctx, input); err != nil {
return diag.FromErr(fmt.Errorf("failed to unregister the DevOps runner from a GitLab instance: %s", err))
}

err := waitUntilRunnerRunning(ctx, d, svc)
if err != nil {
return diag.FromErr(fmt.Errorf("failed to wait for the DevOps Runner to become ready: %s", err))
}

d.SetId("")

return nil
}
45 changes: 45 additions & 0 deletions nifcloud/resources/devops/devopsrunnerregistration/expander.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package devopsrunnerregistration

import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nifcloud/nifcloud-sdk-go/nifcloud"
"github.com/nifcloud/nifcloud-sdk-go/service/devopsrunner"
)

func expandGetRunnerInput(d *schema.ResourceData) *devopsrunner.GetRunnerInput {
return &devopsrunner.GetRunnerInput{
RunnerName: nifcloud.String(d.Get("runner_name").(string)),
}
}

func expandListRunnerRegistrationsInput(d *schema.ResourceData) *devopsrunner.ListRunnerRegistrationsInput {
return &devopsrunner.ListRunnerRegistrationsInput{
RunnerName: nifcloud.String(d.Get("runner_name").(string)),
}
}

func expandRegisterRunnerInput(d *schema.ResourceData) *devopsrunner.RegisterRunnerInput {
return &devopsrunner.RegisterRunnerInput{
RunnerName: nifcloud.String(d.Get("runner_name").(string)),
GitlabUrl: nifcloud.String(d.Get("gitlab_url").(string)),
ParameterGroupName: nifcloud.String(d.Get("parameter_group_name").(string)),
AuthenticationToken: nifcloud.String(d.Get("token").(string)),
}
}

func expandUpdateRunnerRegistrationInput(d *schema.ResourceData) *devopsrunner.UpdateRunnerRegistrationInput {
return &devopsrunner.UpdateRunnerRegistrationInput{
RunnerName: nifcloud.String(d.Get("runner_name").(string)),
RegistrationId: nifcloud.String(d.Id()),
ParameterGroupName: nifcloud.String(d.Get("parameter_group_name").(string)),
}
}

func expandUnregisterRunnerInput(d *schema.ResourceData) *devopsrunner.UnregisterRunnerInput {
return &devopsrunner.UnregisterRunnerInput{
RunnerName: nifcloud.String(d.Get("runner_name").(string)),
RegistrationId: nifcloud.String(d.Id()),
// DisableTokenRevocation is always set to true, enabling the recreation of registrations.
DisableTokenRevocation: nifcloud.Bool(true),
}
}
Loading
Loading