Skip to content

Commit c8fcfe0

Browse files
author
Julien Pivotto
authored
Merge pull request #618 from pdecat/support_pipeline_schedule_import
Add support for importing Pipeline Schedules and Triggers
2 parents df460ed + dde97b4 commit c8fcfe0

6 files changed

+136
-0
lines changed

docs/resources/pipeline_schedule.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,11 @@ The following arguments are supported:
3030
* `cron_timezone` - (Optional, string) The timezone.
3131

3232
* `active` - (Optional, bool) The activation of pipeline schedule. If false is set, the pipeline schedule will deactivated initially.
33+
34+
## Import
35+
36+
GitLab pipeline schedules can be imported using an id made up of `{project_id}:{pipeline_schedule_id}`, e.g.
37+
38+
```
39+
$ terraform import gitlab_pipeline_schedule.test 1:3
40+
```

docs/resources/pipeline_trigger.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ The following arguments are supported:
1818
* `project` - (Required, string) The name or id of the project to add the trigger to.
1919

2020
* `description` - (Required, string) The description of the pipeline trigger.
21+
22+
## Import
23+
24+
GitLab pipeline triggers can be imported using an id made up of `{project_id}:{pipeline_trigger_id}`, e.g.
25+
26+
```
27+
$ terraform import gitlab_pipeline_trigger.test 1:3
28+
```

gitlab/resource_gitlab_pipeline_schedule.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"log"
77
"strconv"
8+
"strings"
89

910
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
1011
gitlab "github.com/xanzy/go-gitlab"
@@ -16,6 +17,9 @@ func resourceGitlabPipelineSchedule() *schema.Resource {
1617
Read: resourceGitlabPipelineScheduleRead,
1718
Update: resourceGitlabPipelineScheduleUpdate,
1819
Delete: resourceGitlabPipelineScheduleDelete,
20+
Importer: &schema.ResourceImporter{
21+
State: resourceGitlabPipelineScheduleStateImporter,
22+
},
1923

2024
Schema: map[string]*schema.Schema{
2125
"project": {
@@ -183,3 +187,17 @@ func resourceGitlabPipelineScheduleDelete(d *schema.ResourceData, meta interface
183187

184188
return nil
185189
}
190+
191+
func resourceGitlabPipelineScheduleStateImporter(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
192+
s := strings.Split(d.Id(), ":")
193+
if len(s) != 2 {
194+
d.SetId("")
195+
return nil, fmt.Errorf("Invalid Pipeline Schedule import format; expected '{project_id}:{pipeline_schedule_id}'")
196+
}
197+
project, id := s[0], s[1]
198+
199+
d.SetId(id)
200+
d.Set("project", project)
201+
202+
return []*schema.ResourceData{d}, nil
203+
}

gitlab/resource_gitlab_pipeline_schedule_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,48 @@ func TestAccGitlabPipelineSchedule_basic(t *testing.T) {
6666
})
6767
}
6868

69+
func TestAccGitlabPipelineSchedule_import(t *testing.T) {
70+
rInt := acctest.RandInt()
71+
resourceName := "gitlab_pipeline_schedule.schedule"
72+
73+
resource.Test(t, resource.TestCase{
74+
PreCheck: func() { testAccPreCheck(t) },
75+
Providers: testAccProviders,
76+
CheckDestroy: testAccCheckGitlabPipelineScheduleDestroy,
77+
Steps: []resource.TestStep{
78+
{
79+
Config: testAccGitlabPipelineScheduleConfig(rInt),
80+
},
81+
{
82+
ResourceName: resourceName,
83+
ImportStateIdFunc: getPipelineScheduleImportID(resourceName),
84+
ImportState: true,
85+
ImportStateVerify: true,
86+
},
87+
},
88+
})
89+
}
90+
91+
func getPipelineScheduleImportID(n string) resource.ImportStateIdFunc {
92+
return func(s *terraform.State) (string, error) {
93+
rs, ok := s.RootModule().Resources[n]
94+
if !ok {
95+
return "", fmt.Errorf("Not Found: %s", n)
96+
}
97+
98+
pipelineScheduleID := rs.Primary.ID
99+
if pipelineScheduleID == "" {
100+
return "", fmt.Errorf("No pipeline schedule ID is set")
101+
}
102+
projectID := rs.Primary.Attributes["project"]
103+
if projectID == "" {
104+
return "", fmt.Errorf("No project ID is set")
105+
}
106+
107+
return fmt.Sprintf("%s:%s", projectID, pipelineScheduleID), nil
108+
}
109+
}
110+
69111
func testAccCheckGitlabPipelineScheduleExists(n string, schedule *gitlab.PipelineSchedule) resource.TestCheckFunc {
70112
return func(s *terraform.State) error {
71113
rs, ok := s.RootModule().Resources[n]

gitlab/resource_gitlab_pipeline_trigger.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"log"
66
"strconv"
7+
"strings"
78

89
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
910
gitlab "github.com/xanzy/go-gitlab"
@@ -15,6 +16,9 @@ func resourceGitlabPipelineTrigger() *schema.Resource {
1516
Read: resourceGitlabPipelineTriggerRead,
1617
Update: resourceGitlabPipelineTriggerUpdate,
1718
Delete: resourceGitlabPipelineTriggerDelete,
19+
Importer: &schema.ResourceImporter{
20+
State: resourceGitlabPipelineTriggerStateImporter,
21+
},
1822

1923
Schema: map[string]*schema.Schema{
2024
"project": {
@@ -115,3 +119,17 @@ func resourceGitlabPipelineTriggerDelete(d *schema.ResourceData, meta interface{
115119
_, err = client.PipelineTriggers.DeletePipelineTrigger(project, pipelineTriggerID)
116120
return err
117121
}
122+
123+
func resourceGitlabPipelineTriggerStateImporter(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
124+
s := strings.Split(d.Id(), ":")
125+
if len(s) != 2 {
126+
d.SetId("")
127+
return nil, fmt.Errorf("Invalid Pipeline Trigger import format; expected '{project_id}:{pipeline_trigger_id}'")
128+
}
129+
project, id := s[0], s[1]
130+
131+
d.SetId(id)
132+
d.Set("project", project)
133+
134+
return []*schema.ResourceData{d}, nil
135+
}

gitlab/resource_gitlab_pipeline_trigger_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,48 @@ func TestAccGitlabPipelineTrigger_basic(t *testing.T) {
5454
})
5555
}
5656

57+
func TestAccGitlabPipelineTrigger_import(t *testing.T) {
58+
rInt := acctest.RandInt()
59+
resourceName := "gitlab_pipeline_trigger.trigger"
60+
61+
resource.Test(t, resource.TestCase{
62+
PreCheck: func() { testAccPreCheck(t) },
63+
Providers: testAccProviders,
64+
CheckDestroy: testAccCheckGitlabPipelineTriggerDestroy,
65+
Steps: []resource.TestStep{
66+
{
67+
Config: testAccGitlabPipelineTriggerConfig(rInt),
68+
},
69+
{
70+
ResourceName: resourceName,
71+
ImportStateIdFunc: getPipelineTriggerImportID(resourceName),
72+
ImportState: true,
73+
ImportStateVerify: true,
74+
},
75+
},
76+
})
77+
}
78+
79+
func getPipelineTriggerImportID(n string) resource.ImportStateIdFunc {
80+
return func(s *terraform.State) (string, error) {
81+
rs, ok := s.RootModule().Resources[n]
82+
if !ok {
83+
return "", fmt.Errorf("Not Found: %s", n)
84+
}
85+
86+
pipelineTriggerID := rs.Primary.ID
87+
if pipelineTriggerID == "" {
88+
return "", fmt.Errorf("No pipeline trigger ID is set")
89+
}
90+
projectID := rs.Primary.Attributes["project"]
91+
if projectID == "" {
92+
return "", fmt.Errorf("No project ID is set")
93+
}
94+
95+
return fmt.Sprintf("%s:%s", projectID, pipelineTriggerID), nil
96+
}
97+
}
98+
5799
func testAccCheckGitlabPipelineTriggerExists(n string, trigger *gitlab.PipelineTrigger) resource.TestCheckFunc {
58100
return func(s *terraform.State) error {
59101
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)