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

Group Hook Resource and Data Sources #1221

Merged
merged 3 commits into from Aug 24, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
59 changes: 59 additions & 0 deletions docs/data-sources/group_hook.md
@@ -0,0 +1,59 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "gitlab_group_hook Data Source - terraform-provider-gitlab"
subcategory: ""
description: |-
The gitlab_group_hook data source allows to retrieve details about a hook in a group.
Upstream API: GitLab REST API docs https://docs.gitlab.com/ee/api/groups.html#get-group-hook
---

# gitlab_group_hook (Data Source)

The `gitlab_group_hook` data source allows to retrieve details about a hook in a group.

**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/groups.html#get-group-hook)

## Example Usage

```terraform
data "gitlab_group" "example" {
id = "foo/bar/baz"
}

data "gitlab_group_hook" "example" {
group = data.gitlab_group.example.id
hook_id = 1
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `group` (String) The ID or full path of the group.
- `hook_id` (Number) The id of the group hook.

### Read-Only

- `confidential_issues_events` (Boolean) Invoke the hook for confidential issues events.
- `confidential_note_events` (Boolean) Invoke the hook for confidential notes events.
- `deployment_events` (Boolean) Invoke the hook for deployment events.
- `enable_ssl_verification` (Boolean) Enable ssl verification when invoking the hook.
- `group_id` (Number) The id of the group for the hook.
- `id` (String) The ID of this resource.
- `issues_events` (Boolean) Invoke the hook for issues events.
- `job_events` (Boolean) Invoke the hook for job events.
- `merge_requests_events` (Boolean) Invoke the hook for merge requests.
- `note_events` (Boolean) Invoke the hook for notes events.
- `pipeline_events` (Boolean) Invoke the hook for pipeline events.
- `push_events` (Boolean) Invoke the hook for push events.
- `push_events_branch_filter` (String) Invoke the hook for push events on matching branches only.
- `releases_events` (Boolean) Invoke the hook for releases events.
- `subgroup_events` (Boolean) Invoke the hook for subgroup events.
- `tag_push_events` (Boolean) Invoke the hook for tag push events.
- `token` (String) A token to present when invoking the hook. The token is not available for imported resources.
- `url` (String) The url of the hook to invoke.
- `wiki_page_events` (Boolean) Invoke the hook for wiki page events.


66 changes: 66 additions & 0 deletions docs/data-sources/group_hooks.md
@@ -0,0 +1,66 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "gitlab_group_hooks Data Source - terraform-provider-gitlab"
subcategory: ""
description: |-
The gitlab_group_hooks data source allows to retrieve details about hooks in a group.
Upstream API: GitLab REST API docs https://docs.gitlab.com/ee/api/groups.html#list-group-hooks
---

# gitlab_group_hooks (Data Source)

The `gitlab_group_hooks` data source allows to retrieve details about hooks in a group.

**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/groups.html#list-group-hooks)

## Example Usage

```terraform
data "gitlab_group" "example" {
id = "foo/bar/baz"
}

data "gitlab_group_hooks" "examples" {
group = data.gitlab_group.example.id
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `group` (String) The ID or full path of the group.

### Read-Only

- `hooks` (List of Object) The list of hooks. (see [below for nested schema](#nestedatt--hooks))
- `id` (String) The ID of this resource.

<a id="nestedatt--hooks"></a>
### Nested Schema for `hooks`

Read-Only:

- `confidential_issues_events` (Boolean)
- `confidential_note_events` (Boolean)
- `deployment_events` (Boolean)
- `enable_ssl_verification` (Boolean)
- `group` (String)
- `group_id` (Number)
- `hook_id` (Number)
- `issues_events` (Boolean)
- `job_events` (Boolean)
- `merge_requests_events` (Boolean)
- `note_events` (Boolean)
- `pipeline_events` (Boolean)
- `push_events` (Boolean)
- `push_events_branch_filter` (String)
- `releases_events` (Boolean)
- `subgroup_events` (Boolean)
- `tag_push_events` (Boolean)
- `token` (String)
- `url` (String)
- `wiki_page_events` (Boolean)


90 changes: 90 additions & 0 deletions docs/resources/group_hook.md
@@ -0,0 +1,90 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "gitlab_group_hook Resource - terraform-provider-gitlab"
subcategory: ""
description: |-
The gitlab_group_hook resource allows to manage the lifecycle of a group hook.
Upstream API: GitLab REST API docs https://docs.gitlab.com/ee/api/groups.html#hooks
---

# gitlab_group_hook (Resource)

The `gitlab_group_hook` resource allows to manage the lifecycle of a group hook.

**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/groups.html#hooks)

## Example Usage

```terraform
resource "gitlab_group_hook" "example" {
group = "example/hooked"
url = "https://example.com/hook/example"
merge_requests_events = true
}

# Setting all attributes
resource "gitlab_group_hook" "all_attributes" {
group = 1
url = "http://example.com"
token = "supersecret"
enable_ssl_verification = false
push_events = true
push_events_branch_filter = "devel"
issues_events = false
confidential_issues_events = false
merge_requests_events = true
tag_push_events = true
note_events = true
confidential_note_events = true
job_events = true
pipeline_events = true
wiki_page_events = true
deployment_events = true
releases_events = true
subgroup_events = true
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `group` (String) The ID or full path of the group.
- `url` (String) The url of the hook to invoke.

### Optional

- `confidential_issues_events` (Boolean) Invoke the hook for confidential issues events.
- `confidential_note_events` (Boolean) Invoke the hook for confidential notes events.
- `deployment_events` (Boolean) Invoke the hook for deployment events.
- `enable_ssl_verification` (Boolean) Enable ssl verification when invoking the hook.
- `issues_events` (Boolean) Invoke the hook for issues events.
- `job_events` (Boolean) Invoke the hook for job events.
- `merge_requests_events` (Boolean) Invoke the hook for merge requests.
- `note_events` (Boolean) Invoke the hook for notes events.
- `pipeline_events` (Boolean) Invoke the hook for pipeline events.
- `push_events` (Boolean) Invoke the hook for push events.
- `push_events_branch_filter` (String) Invoke the hook for push events on matching branches only.
- `releases_events` (Boolean) Invoke the hook for releases events.
- `subgroup_events` (Boolean) Invoke the hook for subgroup events.
- `tag_push_events` (Boolean) Invoke the hook for tag push events.
- `token` (String, Sensitive) A token to present when invoking the hook. The token is not available for imported resources.
- `wiki_page_events` (Boolean) Invoke the hook for wiki page events.

### Read-Only

- `group_id` (Number) The id of the group for the hook.
- `hook_id` (Number) The id of the group hook.
- `id` (String) The ID of this resource.

## Import

Import is supported using the following syntax:

```shell
# A GitLab Group Hook can be imported using a key composed of `<group-id>:<hook-id>`, e.g.
terraform import gitlab_group_hook.example "12345:1"

# NOTE: the `token` resource attribute is not available for imported resources as this information cannot be read from the GitLab API.
```
8 changes: 8 additions & 0 deletions examples/data-sources/gitlab_group_hook/data-source.tf
@@ -0,0 +1,8 @@
data "gitlab_group" "example" {
id = "foo/bar/baz"
}

data "gitlab_group_hook" "example" {
group = data.gitlab_group.example.id
hook_id = 1
}
7 changes: 7 additions & 0 deletions examples/data-sources/gitlab_group_hooks/data-source.tf
@@ -0,0 +1,7 @@
data "gitlab_group" "example" {
id = "foo/bar/baz"
}

data "gitlab_group_hooks" "examples" {
group = data.gitlab_group.example.id
}
4 changes: 4 additions & 0 deletions examples/resources/gitlab_group_hook/import.sh
@@ -0,0 +1,4 @@
# A GitLab Group Hook can be imported using a key composed of `<group-id>:<hook-id>`, e.g.
terraform import gitlab_group_hook.example "12345:1"

# NOTE: the `token` resource attribute is not available for imported resources as this information cannot be read from the GitLab API.
27 changes: 27 additions & 0 deletions examples/resources/gitlab_group_hook/resource.tf
@@ -0,0 +1,27 @@
resource "gitlab_group_hook" "example" {
group = "example/hooked"
url = "https://example.com/hook/example"
merge_requests_events = true
}

# Setting all attributes
resource "gitlab_group_hook" "all_attributes" {
group = 1
url = "http://example.com"
token = "supersecret"
enable_ssl_verification = false
push_events = true
push_events_branch_filter = "devel"
issues_events = false
confidential_issues_events = false
merge_requests_events = true
tag_push_events = true
note_events = true
confidential_note_events = true
job_events = true
pipeline_events = true
wiki_page_events = true
deployment_events = true
releases_events = true
subgroup_events = true
}
39 changes: 39 additions & 0 deletions internal/provider/data_source_gitlab_group_hook.go
@@ -0,0 +1,39 @@
package provider

import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/xanzy/go-gitlab"
)

var _ = registerDataSource("gitlab_group_hook", func() *schema.Resource {
return &schema.Resource{
Description: `The ` + "`gitlab_group_hook`" + ` data source allows to retrieve details about a hook in a group.

**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/groups.html#get-group-hook)`,

ReadContext: dataSourceGitlabGroupHookRead,
Schema: datasourceSchemaFromResourceSchema(gitlabGroupHookSchema(), []string{"group", "hook_id"}, nil),
}
})

func dataSourceGitlabGroupHookRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*gitlab.Client)
group := d.Get("group").(string)
hookID := d.Get("hook_id").(int)

hook, _, err := client.Groups.GetGroupHook(group, hookID, gitlab.WithContext(ctx))
if err != nil {
return diag.FromErr(err)
}

d.SetId(fmt.Sprintf("%s:%d", group, hookID))
stateMap := gitlabGroupHookToStateMap(group, hook)
if err := setStateMapInResourceData(stateMap, d); err != nil {
return diag.FromErr(err)
}
return nil
}
37 changes: 37 additions & 0 deletions internal/provider/data_source_gitlab_group_hook_test.go
@@ -0,0 +1,37 @@
//go:build acceptance
// +build acceptance

package provider

import (
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func TestAccDataSourceGitlabGroupHook_basic(t *testing.T) {
testAccCheckEE(t)

testGroup := testAccCreateGroups(t, 1)[0]
testHook := testAccCreateGroupHooks(t, testGroup.ID, 1)[0]

resource.ParallelTest(t, resource.TestCase{
ProviderFactories: providerFactories,
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
data "gitlab_group_hook" "this" {
group = "%s"
hook_id = %d
}
`, testGroup.FullPath, testHook.ID),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("data.gitlab_group_hook.this", "hook_id", fmt.Sprintf("%d", testHook.ID)),
resource.TestCheckResourceAttr("data.gitlab_group_hook.this", "group_id", fmt.Sprintf("%d", testGroup.ID)),
resource.TestCheckResourceAttr("data.gitlab_group_hook.this", "url", testHook.URL),
),
},
},
})
}