Skip to content

Commit

Permalink
File path (#2)
Browse files Browse the repository at this point in the history
* add job_gerrit_trigger_file_path to client

* add gerrit_file_path to provider

* add gerrit file path to importer

* guard file path import from nil

* fix import branch/filepath id to put project first

* make sure import uses projectIndex first too

* update provider to stop failing on delete for missing resources

* fixed read error for gerrit branch

* more read missing resource errors

* add change_merged event for gerrit trigger
  • Loading branch information
jgramoll committed Aug 7, 2019
1 parent 220f434 commit e62a9a3
Show file tree
Hide file tree
Showing 33 changed files with 1,012 additions and 67 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ resource "jenkins_job_gerrit_trigger" "main" {
}
}
resource "jenkins_job_gerrit_trigger_change_merged_event" "main" {
trigger = "${jenkins_job_gerrit_trigger.main.id}"
}
resource "jenkins_job_gerrit_trigger_patchset_created_event" "main" {
trigger = "${jenkins_job_gerrit_trigger.main.id}"
Expand Down Expand Up @@ -141,6 +145,13 @@ resource "jenkins_job_gerrit_branch" "branch_1" {
pattern = "^(?!refs/meta/config).*$"
}
resource "jenkins_job_gerrit_file_path" "file_path_1" {
project = "${jenkins_job_gerrit_project.project_1.id}"
compare_type = "ANT"
pattern = "path/to/file"
}
resource "jenkins_job_datadog_job_property" "main" {
job = "${jenkins_job.main.name}"
}
Expand Down
5 changes: 4 additions & 1 deletion client/compare_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ const (
CompareTypeUnknown CompareType = iota
CompareTypePlain
CompareTypeRegExp
CompareTypeAnt
)

func (t CompareType) String() string {
return [...]string{"UNKNOWN", "PLAIN", "REG_EXP"}[t]
return [...]string{"UNKNOWN", "PLAIN", "REG_EXP", "ANT"}[t]
}

func ParseCompareType(s string) (CompareType, error) {
Expand All @@ -26,6 +27,8 @@ func ParseCompareType(s string) (CompareType, error) {
return CompareTypePlain, nil
case "REG_EXP":
return CompareTypeRegExp, nil
case "ANT":
return CompareTypeAnt, nil
}
}

Expand Down
17 changes: 15 additions & 2 deletions client/job_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,21 @@ func TestJobConfigSerialize(t *testing.T) {
gerritBranch := NewJobGerritTriggerBranch()
gerritBranch.CompareType = CompareTypeRegExp
gerritBranch.Pattern = "my-branch"
gerritFilePath := NewJobGerritTriggerFilePath()
gerritFilePath.CompareType = CompareTypeAnt
gerritFilePath.Pattern = "my-file"
gerritProject := NewJobGerritTriggerProject()
gerritProject.CompareType = CompareTypePlain
gerritProject.Pattern = "my-project"
gerritProject.FilePaths = gerritProject.FilePaths.Append(gerritFilePath)
gerritProject.Branches = gerritProject.Branches.Append(gerritBranch)
gerritTrigger := NewJobGerritTrigger()
gerritTrigger.Plugin = "gerrit-trigger@2.29.0"
gerritTrigger.Projects = gerritTrigger.Projects.Append(gerritProject)
gerritTriggerPatchsetEvent := NewJobGerritTriggerPluginPatchsetCreatedEvent()
gerritTrigger.TriggerOnEvents = gerritTrigger.TriggerOnEvents.Append(gerritTriggerPatchsetEvent)
gerritTriggerChangeMergedEvent := NewJobGerritTriggerPluginChangeMergedEvent()
gerritTrigger.TriggerOnEvents = gerritTrigger.TriggerOnEvents.Append(gerritTriggerChangeMergedEvent)
gerritTriggerPatchsetCreatedEvent := NewJobGerritTriggerPluginPatchsetCreatedEvent()
gerritTrigger.TriggerOnEvents = gerritTrigger.TriggerOnEvents.Append(gerritTriggerPatchsetCreatedEvent)
gerritTriggerDraftEvent := NewJobGerritTriggerPluginDraftPublishedEvent()
gerritTrigger.TriggerOnEvents = gerritTrigger.TriggerOnEvents.Append(gerritTriggerDraftEvent)
triggerJobProperty := NewJobPipelineTriggersProperty()
Expand Down Expand Up @@ -103,6 +109,12 @@ func TestJobConfigSerialize(t *testing.T) {
<pattern>my-branch</pattern>
</com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch>
</branches>
<filePaths>
<com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath>
<compareType>ANT</compareType>
<pattern>my-file</pattern>
</com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath>
</filePaths>
<disableStrictForbiddenFileVerification>false</disableStrictForbiddenFileVerification>
</com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
</gerritProjects>
Expand Down Expand Up @@ -130,6 +142,7 @@ func TestJobConfigSerialize(t *testing.T) {
<customUrl></customUrl>
<serverName>__ANY__</serverName>
<triggerOnEvents class="linked-list">
<com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent></com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent>
<com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent>
<excludeDrafts>false</excludeDrafts>
<excludeTrivialRebase>false</excludeTrivialRebase>
Expand Down
11 changes: 11 additions & 0 deletions client/job_gerrit_trigger_file_path.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package client

type JobGerritTriggerFilePath struct {
Id string `xml:"id,attr,omitempty"`
CompareType CompareType `xml:"compareType"`
Pattern string `xml:"pattern"`
}

func NewJobGerritTriggerFilePath() *JobGerritTriggerFilePath {
return &JobGerritTriggerFilePath{}
}
21 changes: 21 additions & 0 deletions client/job_gerrit_trigger_file_paths.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package client

type JobGerritTriggerFilePaths struct {
Items *[]*JobGerritTriggerFilePath `xml:"com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath"`
}

func NewJobGerritTriggerFilePaths() *JobGerritTriggerFilePaths {
return &JobGerritTriggerFilePaths{
Items: &[]*JobGerritTriggerFilePath{},
}
}

func (paths *JobGerritTriggerFilePaths) Append(path *JobGerritTriggerFilePath) *JobGerritTriggerFilePaths {
newPaths := NewJobGerritTriggerFilePaths()
if paths.Items != nil {
*newPaths.Items = append(*paths.Items, path)
} else {
*newPaths.Items = []*JobGerritTriggerFilePath{path}
}
return newPaths
}
33 changes: 33 additions & 0 deletions client/job_gerrit_trigger_plugin_change_merged_event.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package client

import "encoding/xml"

func init() {
jobGerritTriggerOnEventsUnmarshalFunc["com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent"] = unmarshalJobGerritTriggerPluginChangeMergedEvent
}

type JobGerritTriggerPluginChangeMergedEvent struct {
XMLName xml.Name `xml:"com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent"`
Id string `xml:"id,attr,omitempty"`
}

func NewJobGerritTriggerPluginChangeMergedEvent() *JobGerritTriggerPluginChangeMergedEvent {
return &JobGerritTriggerPluginChangeMergedEvent{}
}

func (event *JobGerritTriggerPluginChangeMergedEvent) GetId() string {
return event.Id
}

func (e *JobGerritTriggerPluginChangeMergedEvent) SetId(id string) {
e.Id = id
}

func unmarshalJobGerritTriggerPluginChangeMergedEvent(d *xml.Decoder, start xml.StartElement) (JobGerritTriggerOnEvent, error) {
event := NewJobGerritTriggerPluginChangeMergedEvent()
err := d.DecodeElement(event, &start)
if err != nil {
return nil, err
}
return event, nil
}
43 changes: 39 additions & 4 deletions client/job_gerrit_trigger_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,25 @@ import (
// ErrJobGerritTriggerBranchNotFound job trigger gerrit branch not found
var ErrJobGerritTriggerBranchNotFound = errors.New("Could not find job trigger gerrit branch")

// ErrJobGerritTriggerFilePathNotFound job trigger gerrit file path not found
var ErrJobGerritTriggerFilePathNotFound = errors.New("Could not find job trigger gerrit file path")

type JobGerritTriggerProject struct {
XMLName xml.Name `xml:"com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject"`
Id string `xml:"id,attr,omitempty"`

CompareType CompareType `xml:"compareType"`
Pattern string `xml:"pattern"`
Branches *JobGerritTriggerBranches `xml:"branches"`
CompareType CompareType `xml:"compareType"`
Pattern string `xml:"pattern"`
Branches *JobGerritTriggerBranches `xml:"branches"`
FilePaths *JobGerritTriggerFilePaths `xml:"filePaths"`

DisableStrictForbiddenFileVerification bool `xml:"disableStrictForbiddenFileVerification"`
}

func NewJobGerritTriggerProject() *JobGerritTriggerProject {
return &JobGerritTriggerProject{
Branches: NewJobGerritTriggerBranches(),
Branches: NewJobGerritTriggerBranches(),
FilePaths: NewJobGerritTriggerFilePaths(),
}
}

Expand Down Expand Up @@ -54,3 +59,33 @@ func (project *JobGerritTriggerProject) DeleteBranch(branchId string) error {
}
return ErrJobGerritTriggerBranchNotFound
}

func (project *JobGerritTriggerProject) GetFilePath(filePathId string) (*JobGerritTriggerFilePath, error) {
filePaths := *(project.FilePaths).Items
for _, filePath := range filePaths {
if filePath.Id == filePathId {
return filePath, nil
}
}
return nil, ErrJobGerritTriggerFilePathNotFound
}

func (project *JobGerritTriggerProject) UpdateFilePath(filePath *JobGerritTriggerFilePath) error {
oldFilePath, err := project.GetFilePath(filePath.Id)
if err != nil {
return err
}
*oldFilePath = *filePath
return nil
}

func (project *JobGerritTriggerProject) DeleteFilePath(filePathId string) error {
filePaths := *project.FilePaths.Items
for i, filePath := range filePaths {
if filePath.Id == filePathId {
*project.FilePaths.Items = append(filePaths[:i], filePaths[i+1:]...)
return nil
}
}
return ErrJobGerritTriggerFilePathNotFound
}
10 changes: 5 additions & 5 deletions importer/resource_job_gerrit_trigger_branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,28 @@ func jobGerritTriggerBranchesCode(projectIndex int, branches *client.JobGerritTr
code := ""
for i, item := range *branches.Items {
code += fmt.Sprintf(`
resource "jenkins_job_gerrit_branch" "branch_%v" {
resource "jenkins_job_gerrit_branch" "branch_%v_%v" {
project = "${jenkins_job_gerrit_project.project_%v.id}"
compare_type = "%v"
pattern = "%v"
}
`, i+1, projectIndex, item.CompareType, item.Pattern)
`, projectIndex, i+1, projectIndex, item.CompareType, item.Pattern)
}
return code
}

func jobGerritTriggerBranchesImportScript(
jobName string, propertyId string, triggerId string,
projectIndex int, jobName string, propertyId string, triggerId string,
projectId string, branches *client.JobGerritTriggerBranches,
) string {
code := ""
for i, item := range *branches.Items {
id := provider.ResourceJobGerritBranchId(
jobName, propertyId, triggerId, projectId, item.Id)
code += fmt.Sprintf(`
terraform import jenkins_job_gerrit_branch.branch_%v "%v"
`, i+1, id)
terraform import jenkins_job_gerrit_branch.branch_%v_%v "%v"
`, projectIndex, i+1, id)
}
return code
}
61 changes: 61 additions & 0 deletions importer/resource_job_gerrit_trigger_file_path.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package main

import (
"fmt"

"github.com/google/uuid"
"github.com/jgramoll/terraform-provider-jenkins/client"
"github.com/jgramoll/terraform-provider-jenkins/provider"
)

func ensureJobGerritTriggerFilePaths(filePaths *client.JobGerritTriggerFilePaths) error {
if filePaths == nil || filePaths.Items == nil {
return nil
}
for _, item := range *filePaths.Items {
if item.Id == "" {
id, err := uuid.NewRandom()
if err != nil {
return err
}
item.Id = id.String()
}
}
return nil
}

func jobGerritTriggerFilePathsCode(projectIndex int, filePaths *client.JobGerritTriggerFilePaths) string {
code := ""
if filePaths == nil || filePaths.Items == nil {
return code
}
for i, item := range *filePaths.Items {
code += fmt.Sprintf(`
resource "jenkins_job_gerrit_file_path" "file_path_%v_%v" {
project = "${jenkins_job_gerrit_project.project_%v.id}"
compare_type = "%v"
pattern = "%v"
}
`, projectIndex, i+1, projectIndex, item.CompareType, item.Pattern)
}
return code
}

func jobGerritTriggerFilePathsImportScript(
projectIndex int, jobName string, propertyId string, triggerId string,
projectId string, filePaths *client.JobGerritTriggerFilePaths,
) string {
code := ""
if filePaths == nil || filePaths.Items == nil {
return code
}
for i, item := range *filePaths.Items {
id := provider.ResourceJobGerritFilePathId(
jobName, propertyId, triggerId, projectId, item.Id)
code += fmt.Sprintf(`
terraform import jenkins_job_gerrit_file_path.file_path_%v_%v "%v"
`, projectIndex, i+1, id)
}
return code
}
30 changes: 30 additions & 0 deletions importer/resource_job_gerrit_trigger_plugin_change_merged_event.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package main

import (
"fmt"

"github.com/jgramoll/terraform-provider-jenkins/client"
"github.com/jgramoll/terraform-provider-jenkins/provider"
)

func init() {
jobGerritTriggerOnEventsCodeFuncs["*client.JobGerritTriggerPluginChangeMergedEvent"] = jobGerritTriggerPluginChangeMergedEventCode
jobGerritTriggerOnEventsImportScriptFuncs["*client.JobGerritTriggerPluginChangeMergedEvent"] = jobGerritTriggerPluginChangeMergedEventImportScript
}

func jobGerritTriggerPluginChangeMergedEventCode(client.JobGerritTriggerOnEvent) string {
return `
resource "jenkins_job_gerrit_trigger_change_merged_event" "main" {
trigger = "${jenkins_job_gerrit_trigger.main.id}"
}
`
}

func jobGerritTriggerPluginChangeMergedEventImportScript(
jobName string, propertyId string, triggerId string,
e client.JobGerritTriggerOnEvent,
) string {
return fmt.Sprintf(`
terraform import jenkins_job_gerrit_trigger_change_merged_event.main "%v"
`, provider.ResourceJobGerritTriggerEventId(jobName, propertyId, triggerId, e.GetId()))
}
11 changes: 8 additions & 3 deletions importer/resource_job_gerrit_trigger_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ resource "jenkins_job_gerrit_project" "project_%v" {
compare_type = "%v"
pattern = "%v"
}
`, projectIndex, item.CompareType, item.Pattern) + jobGerritTriggerBranchesCode(projectIndex, item.Branches)
`, projectIndex, item.CompareType, item.Pattern) +
jobGerritTriggerBranchesCode(projectIndex, item.Branches) +
jobGerritTriggerFilePathsCode(projectIndex, item.FilePaths)
}
return code
}
Expand All @@ -53,11 +55,14 @@ func jobGerritTriggerProjectsImportScript(
) string {
code := ""
for i, item := range *projects.Items {
projectIndex := i + 1
code += fmt.Sprintf(`
terraform import jenkins_job_gerrit_project.project_%v "%v"
`, i+1, provider.ResourceJobGerritProjectId(jobName, propertyId, triggerId, item.Id)) +
`, projectIndex, provider.ResourceJobGerritProjectId(jobName, propertyId, triggerId, item.Id)) +
jobGerritTriggerBranchesImportScript(
jobName, propertyId, triggerId, item.Id, item.Branches)
projectIndex, jobName, propertyId, triggerId, item.Id, item.Branches) +
jobGerritTriggerFilePathsImportScript(
projectIndex, jobName, propertyId, triggerId, item.Id, item.FilePaths)
}
return code
}
Loading

0 comments on commit e62a9a3

Please sign in to comment.