`gitlab_user_runner` import does not populate `group_id` causing force replacement
# `gitlab_user_runner` import does not populate `group_id` field
<!-- 🚧 Please make sure to add a meaningful issue title above -->
## Bug Report
When importing a `gitlab_user_runner` resource that was created via the GitLab UI (or API), the `group_id` attribute is not populated in the Terraform state during import. This causes Terraform to show a perpetual diff with `+ group_id = <id> # forces replacement`, leading to an unnecessary destroy+recreate cycle on the next apply.
The runner is correctly associated with the group (confirmed via GitLab API), but the import function does not read and set the `group_id` attribute from the API response's `groups` array.
**Expected behavior:** After importing a group runner, the `group_id` should be automatically populated in the state based on the runner's group association returned by the GitLab API.
**Actual behavior:** The `group_id` remains unset after import, causing Terraform to plan a force replacement to add it.
## Relevant Terraform Configuration
```hcl
terraform {
required_providers {
gitlab = {
source = "gitlabhq/gitlab"
version = ">= 18.0"
}
}
required_version = "~> 1"
}
resource "gitlab_user_runner" "this" {
runner_type = "group_type"
group_id = <group_id>
description = "Whatever"
}
```
## Relevant Terraform Command
```sh
# Import the runner
terraform import gitlab_user_runner.this <group_id>
# Then run plan
terraform plan
```
In the statefile, the imported resource will have the `group_id` as `null`:
```json
{
"module": "module.gitlab",
"mode": "managed",
"type": "gitlab_user_runner",
"name": "this",
"provider": "provider[\"registry.terraform.io/gitlabhq/gitlab\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_level": "not_protected",
"description": "Whatever",
"group_id": null,
"id": "<id>",
"locked": false,
"maintenance_note": "",
"maximum_timeout": 0,
"paused": false,
"project_id": null,
"runner_type": "group_type",
"tag_list": [],
"token": null,
"untagged": true
},
"sensitive_attributes": [
[
{
"type": "get_attr",
"value": "token"
}
]
],
"identity_schema_version": 0
}
]
}
```
## Relevant Log Output
### Terraform Plan Output (showing the force replacement)
```plaintext
# gitlab_user_runner.this must be replaced
# (imported from "<group_id>")
# Warning: this will destroy the imported resource
-/+ resource "gitlab_user_runner" "this" {
~ access_level = "not_protected" -> (known after apply)
description = "Whatever"
+ group_id = <group_id> # forces replacement
~ id = "<id>" -> (known after apply)
~ locked = false -> (known after apply)
+ maintenance_note = (known after apply)
~ maximum_timeout = 0 -> (known after apply)
~ paused = false -> (known after apply)
runner_type = "group_type"
~ tag_list = [] -> (known after apply)
+ token = (sensitive value)
~ untagged = true -> (known after apply)
}
```
Note the `+ group_id = <group_id> # forces replacement` line - the `+` indicates this attribute is being **added** (not changed), meaning it was not populated during import.
## Additional Details
- GitLab Terraform Provider Version: `>= 18.0` (tested with 18.x)
- GitLab Instance Version: `GitLab.com (SaaS)`
- Terraform Version: `~> 1.0`
- License Tier: `Free` and `Premium` (using GitLab.com)
issue