Skip to content

Commit de324e7

Browse files
committed
New Data Source: datasource/gitlab_instance_deploy_keys
Closes #373
1 parent 32e9fe2 commit de324e7

File tree

9 files changed

+355
-20
lines changed

9 files changed

+355
-20
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "gitlab_instance_deploy_keys Data Source - terraform-provider-gitlab"
4+
subcategory: ""
5+
description: |-
6+
The gitlab_instance_deploy_keys data source allows to retrieve a list of deploy keys for a GitLab instance.
7+
-> This data source requires administration privileges.
8+
Upstream API: GitLab REST API docs https://docs.gitlab.com/ee/api/deploy_keys.html#list-all-deploy-keys
9+
---
10+
11+
# gitlab_instance_deploy_keys (Data Source)
12+
13+
The `gitlab_instance_deploy_keys` data source allows to retrieve a list of deploy keys for a GitLab instance.
14+
15+
-> This data source requires administration privileges.
16+
17+
**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/deploy_keys.html#list-all-deploy-keys)
18+
19+
## Example Usage
20+
21+
```terraform
22+
data "gitlab_instance_deploy_keys" "example" {}
23+
24+
# only public deploy keys
25+
data "gitlab_instance_deploy_keys" "example" {
26+
public = true
27+
}
28+
```
29+
30+
<!-- schema generated by tfplugindocs -->
31+
## Schema
32+
33+
### Optional
34+
35+
- **id** (String) The ID of this resource.
36+
- **public** (Boolean) Only return deploy keys that are public.
37+
38+
### Read-Only
39+
40+
- **deploy_keys** (List of Object) The list of all deploy keys across all projects of the GitLab instance. (see [below for nested schema](#nestedatt--deploy_keys))
41+
42+
<a id="nestedatt--deploy_keys"></a>
43+
### Nested Schema for `deploy_keys`
44+
45+
Read-Only:
46+
47+
- **created_at** (String)
48+
- **fingerprint** (String)
49+
- **id** (Number)
50+
- **key** (String)
51+
- **projects_with_write_access** (List of Object) (see [below for nested schema](#nestedobjatt--deploy_keys--projects_with_write_access))
52+
- **title** (String)
53+
54+
<a id="nestedobjatt--deploy_keys--projects_with_write_access"></a>
55+
### Nested Schema for `deploy_keys.projects_with_write_access`
56+
57+
Read-Only:
58+
59+
- **created_at** (String)
60+
- **description** (String)
61+
- **id** (Number)
62+
- **name** (String)
63+
- **name_with_namespace** (String)
64+
- **path** (String)
65+
- **path_with_namespace** (String)
66+
67+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
data "gitlab_instance_deploy_keys" "example" {}
2+
3+
# only public deploy keys
4+
data "gitlab_instance_deploy_keys" "example" {
5+
public = true
6+
}

go.mod

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ require (
1111
github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1
1212
github.com/mitchellh/hashstructure v1.1.0
1313
github.com/onsi/gomega v1.18.1
14-
github.com/xanzy/go-gitlab v0.58.0
14+
github.com/xanzy/go-gitlab v0.59.0
1515
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
16+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
17+
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a // indirect
18+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
1619
google.golang.org/api v0.34.0 // indirect
20+
google.golang.org/appengine v1.6.7 // indirect
21+
google.golang.org/protobuf v1.27.1 // indirect
1722
)

go.sum

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,8 @@ github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaU
344344
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
345345
github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
346346
github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
347-
github.com/xanzy/go-gitlab v0.58.0 h1:Entnl8GrVDlc1jd1BlOWhNR0QVQgiO3WDom5DJbT+1s=
348-
github.com/xanzy/go-gitlab v0.58.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM=
347+
github.com/xanzy/go-gitlab v0.59.0 h1:fAr6rT/YIdfmBavYgI42+Op7yAAex2Y4xOfvbjN9hxQ=
348+
github.com/xanzy/go-gitlab v0.59.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM=
349349
github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI=
350350
github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0=
351351
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -445,16 +445,19 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v
445445
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
446446
golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
447447
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
448-
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
449448
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
449+
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
450+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
451+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
450452
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
451453
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
452454
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
453455
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
454456
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
455457
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
456-
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=
457458
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
459+
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=
460+
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
458461
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
459462
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
460463
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -509,20 +512,23 @@ golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7w
509512
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
510513
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
511514
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
512-
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
513515
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
516+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
517+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
514518
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
515519
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
516520
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
517521
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
518522
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
519523
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
520-
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
521524
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
525+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
526+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
522527
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
523528
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
524-
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
525529
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
530+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
531+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
526532
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
527533
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
528534
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -596,8 +602,9 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
596602
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
597603
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
598604
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
599-
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
600605
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
606+
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
607+
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
601608
google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
602609
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
603610
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -658,8 +665,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
658665
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
659666
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
660667
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
661-
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
662668
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
669+
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
670+
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
663671
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
664672
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
665673
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"time"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
gitlab "github.com/xanzy/go-gitlab"
12+
)
13+
14+
var _ = registerDataSource("gitlab_instance_deploy_keys", func() *schema.Resource {
15+
return &schema.Resource{
16+
Description: `The ` + "`gitlab_instance_deploy_keys`" + ` data source allows to retrieve a list of deploy keys for a GitLab instance.
17+
18+
-> This data source requires administration privileges.
19+
20+
**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/deploy_keys.html#list-all-deploy-keys)`,
21+
22+
ReadContext: dataSourceGitlabInstanceDeployKeysRead,
23+
Schema: map[string]*schema.Schema{
24+
"public": {
25+
Description: "Only return deploy keys that are public.",
26+
Type: schema.TypeBool,
27+
Optional: true,
28+
},
29+
"deploy_keys": {
30+
Description: "The list of all deploy keys across all projects of the GitLab instance.",
31+
Type: schema.TypeList,
32+
Computed: true,
33+
Elem: &schema.Resource{
34+
Schema: map[string]*schema.Schema{
35+
"id": {
36+
Description: "The ID of the deploy key.",
37+
Type: schema.TypeInt,
38+
Computed: true,
39+
},
40+
"title": {
41+
Description: "The title of the deploy key.",
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
"created_at": {
46+
Description: "The creation date of the deploy key. In RFC3339 format.",
47+
Type: schema.TypeString,
48+
Computed: true,
49+
},
50+
"key": {
51+
Description: "The deploy key.",
52+
Type: schema.TypeString,
53+
Computed: true,
54+
},
55+
"fingerprint": {
56+
Description: "The fingerprint of the deploy key.",
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
"projects_with_write_access": {
61+
Description: "The list of projects that the deploy key has write access to.",
62+
Type: schema.TypeList,
63+
Computed: true,
64+
Elem: &schema.Resource{
65+
Schema: map[string]*schema.Schema{
66+
"id": {
67+
Description: "The ID of the project.",
68+
Type: schema.TypeInt,
69+
Computed: true,
70+
},
71+
"description": {
72+
Description: "The description of the project.",
73+
Type: schema.TypeString,
74+
Computed: true,
75+
},
76+
"name": {
77+
Description: "The name of the project.",
78+
Type: schema.TypeString,
79+
Computed: true,
80+
},
81+
"name_with_namespace": {
82+
Description: "The name of the project with namespace.",
83+
Type: schema.TypeString,
84+
Computed: true,
85+
},
86+
"path": {
87+
Description: "The path of the project.",
88+
Type: schema.TypeString,
89+
Computed: true,
90+
},
91+
"path_with_namespace": {
92+
Description: "The path of the project with namespace.",
93+
Type: schema.TypeString,
94+
Computed: true,
95+
},
96+
"created_at": {
97+
Description: "The creation date of the project. In RFC3339 format.",
98+
Type: schema.TypeString,
99+
Computed: true,
100+
},
101+
},
102+
},
103+
},
104+
},
105+
},
106+
},
107+
},
108+
}
109+
})
110+
111+
func dataSourceGitlabInstanceDeployKeysRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
112+
client := meta.(*gitlab.Client)
113+
114+
// Get group memberships
115+
options := &gitlab.ListInstanceDeployKeysOptions{
116+
ListOptions: gitlab.ListOptions{
117+
PerPage: 20,
118+
Page: 1,
119+
},
120+
Public: gitlab.Bool(d.Get("public").(bool)),
121+
}
122+
123+
log.Printf("[INFO] Reading Instance Deploy Keys, with: %v", options)
124+
125+
var instanceDeployKeys []*gitlab.InstanceDeployKey
126+
for options.Page != 0 {
127+
paginatedInstancedeployKeys, resp, err := client.DeployKeys.ListAllDeployKeys(options, gitlab.WithContext(ctx))
128+
if err != nil {
129+
return diag.FromErr(err)
130+
}
131+
instanceDeployKeys = append(instanceDeployKeys, paginatedInstancedeployKeys...)
132+
133+
options.Page = resp.NextPage
134+
}
135+
136+
// NOTE: this data source doesn't have a "real" id, but the query to the API
137+
// should actually return the same response for the same options,
138+
// therefore the `Public` field option is used as id.
139+
d.SetId(fmt.Sprintf("%b", options.Public))
140+
if err := d.Set("deploy_keys", flattenGitlabInstanceDeployKeys(instanceDeployKeys)); err != nil {
141+
return diag.Errorf("error setting deploy_keys: %s", err)
142+
}
143+
return nil
144+
}
145+
146+
func flattenGitlabInstanceDeployKeys(keys []*gitlab.InstanceDeployKey) []interface{} {
147+
result := []interface{}{}
148+
for _, instanceDeployKey := range keys {
149+
values := map[string]interface{}{
150+
"id": instanceDeployKey.ID,
151+
"title": instanceDeployKey.Title,
152+
"created_at": instanceDeployKey.CreatedAt.Format(time.RFC3339),
153+
"key": instanceDeployKey.Key,
154+
"fingerprint": instanceDeployKey.Fingerprint,
155+
"projects_with_write_access": flattenGitlabInstanceDeployKeysProjectsWithWriteAccess(instanceDeployKey.ProjectsWithWriteAccess),
156+
}
157+
result = append(result, values)
158+
}
159+
return result
160+
}
161+
162+
func flattenGitlabInstanceDeployKeysProjectsWithWriteAccess(projects []*gitlab.DeployKeyProject) []interface{} {
163+
result := []interface{}{}
164+
for _, project := range projects {
165+
values := map[string]interface{}{
166+
"id": project.ID,
167+
"description": project.Description,
168+
"name": project.Name,
169+
"name_with_namespace": project.NameWithNamespace,
170+
"path": project.Path,
171+
"path_with_namespace": project.PathWithNamespace,
172+
"created_at": project.CreatedAt.Format(time.RFC3339),
173+
}
174+
result = append(result, values)
175+
}
176+
return result
177+
}

0 commit comments

Comments
 (0)