Skip to content

Commit

Permalink
fix importer with multiple triggers (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
jgramoll committed Aug 15, 2019
1 parent a4579f0 commit c8e7408
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 65 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# terraform-provider-jenkins Change Log
# terraform-provider-jenkins

## 0.2.0

Expand Down
14 changes: 7 additions & 7 deletions importer/resource_job_build_discarder_property.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@ func init() {
jobPropertyImportScriptFuncs["*client.JobBuildDiscarderProperty"] = jobBuildDiscarderPropertyImportScript
}

func jobBuildDiscarderPropertyCode(propertyInterface client.JobProperty) string {
func jobBuildDiscarderPropertyCode(propertyIndex int, propertyInterface client.JobProperty) string {
property := propertyInterface.(*client.JobBuildDiscarderProperty)
return `
resource "jenkins_job_build_discarder_property" "main" {
return fmt.Sprintf(`
resource "jenkins_job_build_discarder_property" "property_%v" {
job = "${jenkins_job.main.name}"
}
` + jobBuildDiscarderPropertyStrategyCode(property.Strategy.Item)
`, propertyIndex) + jobBuildDiscarderPropertyStrategyCode(propertyIndex, property.Strategy.Item)
}

func jobBuildDiscarderPropertyImportScript(jobName string, propertyInterface client.JobProperty) string {
func jobBuildDiscarderPropertyImportScript(propertyIndex int, jobName string, propertyInterface client.JobProperty) string {
property := propertyInterface.(*client.JobBuildDiscarderProperty)
return fmt.Sprintf(`
terraform import jenkins_job_build_discarder_property.main "%v"
`, provider.ResourceJobPropertyId(jobName, property.Id)) +
terraform import jenkins_job_build_discarder_property.property_%v "%v"
`, propertyIndex, provider.ResourceJobPropertyId(jobName, property.Id)) +
jobBuildDiscarderPropertyStrategyImportScript(jobName, property.Id, property.Strategy.Item)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,20 @@ func init() {
jobBuildDiscarderPropertyStrategyImportScriptFuncs["*client.JobBuildDiscarderPropertyStrategyLogRotator"] = jobBuildDiscarderPropertyLogRotatorStrategyImportScript
}

func jobBuildDiscarderPropertyLogRotatorStrategyCode(strategyInterface client.JobBuildDiscarderPropertyStrategy) string {
func jobBuildDiscarderPropertyLogRotatorStrategyCode(propertyIndex int, strategyInterface client.JobBuildDiscarderPropertyStrategy) string {
strategy := strategyInterface.(*client.JobBuildDiscarderPropertyStrategyLogRotator)
return fmt.Sprintf(`
resource "jenkins_job_build_discarder_property_log_rotator_strategy" "main" {
property = "${jenkins_job_build_discarder_property.main.id}"
property = "${jenkins_job_build_discarder_property.property_%v.id}"
days_to_keep = "%v"
num_to_keep = "%v"
artifact_days_to_keep = "%v"
artifact_num_to_keep = "%v"
}
`, strategy.DaysToKeep, strategy.NumToKeep, strategy.ArtifactDaysToKeep, strategy.ArtifactNumToKeep)
`, propertyIndex,
strategy.DaysToKeep, strategy.NumToKeep,
strategy.ArtifactDaysToKeep, strategy.ArtifactNumToKeep)
}

func jobBuildDiscarderPropertyLogRotatorStrategyImportScript(
Expand Down
6 changes: 3 additions & 3 deletions importer/resource_job_build_discarder_property_strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ import (
"github.com/jgramoll/terraform-provider-jenkins/client"
)

type jobBuildDiscarderPropertyStrategyCodeFunc func(client.JobBuildDiscarderPropertyStrategy) string
type jobBuildDiscarderPropertyStrategyCodeFunc func(int, client.JobBuildDiscarderPropertyStrategy) string
type jobBuildDiscarderPropertyStrategyImportScriptFunc func(string, string, client.JobBuildDiscarderPropertyStrategy) string

var jobBuildDiscarderPropertyStrategyCodeFuncs = map[string]jobBuildDiscarderPropertyStrategyCodeFunc{}
var jobBuildDiscarderPropertyStrategyImportScriptFuncs = map[string]jobBuildDiscarderPropertyStrategyImportScriptFunc{}

func jobBuildDiscarderPropertyStrategyCode(strategy client.JobBuildDiscarderPropertyStrategy) string {
func jobBuildDiscarderPropertyStrategyCode(propertyIndex int, strategy client.JobBuildDiscarderPropertyStrategy) string {
reflectType := reflect.TypeOf(strategy).String()
if codeFunc, ok := jobBuildDiscarderPropertyStrategyCodeFuncs[reflectType]; ok {
return codeFunc(strategy)
return codeFunc(propertyIndex, strategy)
} else {
log.Println("[WARNING] Unkown Job Build Discarder Property Strategy:", reflectType)
}
Expand Down
14 changes: 7 additions & 7 deletions importer/resource_job_datadog_job_property.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ func init() {
jobPropertyImportScriptFuncs["*client.JobDatadogJobProperty"] = jobDatadogJobPropertyImportScript
}

func jobDatadogJobPropertyCode(client.JobProperty) string {
return `
resource "jenkins_job_datadog_job_property" "main" {
func jobDatadogJobPropertyCode(propertyIndex int, property client.JobProperty) string {
return fmt.Sprintf(`
resource "jenkins_job_datadog_job_property" "property_%v" {
job = "${jenkins_job.main.name}"
}
`
`, propertyIndex)
}

func jobDatadogJobPropertyImportScript(jobName string, p client.JobProperty) string {
func jobDatadogJobPropertyImportScript(propertyIndex int, jobName string, p client.JobProperty) string {
return fmt.Sprintf(`
terraform import jenkins_job_datadog_job_property.main "%v"
`, provider.ResourceJobPropertyId(jobName, p.GetId()))
terraform import jenkins_job_datadog_job_property.property_%v "%v"
`, propertyIndex, provider.ResourceJobPropertyId(jobName, p.GetId()))
}
21 changes: 14 additions & 7 deletions importer/resource_job_gerrit_trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ func ensureJobGerritTrigger(triggerInterface client.JobTrigger) error {
return ensureJobGerritTriggerOnEvents(trigger.TriggerOnEvents)
}

func jobGerritTriggerCode(triggerInterface client.JobTrigger) string {
func jobGerritTriggerCode(propertyIndex int, triggerIndex int, triggerInterface client.JobTrigger) string {
trigger := triggerInterface.(*client.JobGerritTrigger)

triggerOnEvents := jobGerritTriggerOnEventsCode(trigger.TriggerOnEvents)
triggerProjects := jobGerritTriggerProjectsCode(trigger.Projects)
dynamicGerritProjects := jobDynamicGerritProjectsCode(trigger.DynamicGerritProjects)
return fmt.Sprintf(`
resource "jenkins_job_gerrit_trigger" "main" {
property = "${jenkins_job_pipeline_triggers_property.main.id}"
resource "jenkins_job_gerrit_trigger" "trigger_%v_%v" {
property = "${jenkins_job_pipeline_triggers_property.property_%v.id}"
plugin = "%v"
server_name = "%v"
Expand All @@ -61,20 +61,27 @@ resource "jenkins_job_gerrit_trigger" "main" {
on_not_built = %v
}
}
`, trigger.Plugin, trigger.ServerName, trigger.SilentMode, trigger.SilentStartMode, trigger.EscapeQuotes,
`, propertyIndex, triggerIndex, propertyIndex,
trigger.Plugin, trigger.ServerName, trigger.SilentMode, trigger.SilentStartMode, trigger.EscapeQuotes,
trigger.NameAndEmailParameterMode, trigger.CommitMessageParameterMode, trigger.ChangeSubjectParameterMode,
trigger.CommentTextParameterMode, trigger.DynamicTriggerConfiguration,
trigger.SkipVote.OnSuccessful, trigger.SkipVote.OnFailed,
trigger.SkipVote.OnUnstable, trigger.SkipVote.OnNotBuilt) +
triggerOnEvents + triggerProjects + dynamicGerritProjects
}

func jobGerritTriggerImportScript(jobName string, propertyId string, triggerInterface client.JobTrigger) string {
func jobGerritTriggerImportScript(
propertyIndex int,
triggerIndex int,
jobName string,
propertyId string,
triggerInterface client.JobTrigger,
) string {
trigger := triggerInterface.(*client.JobGerritTrigger)

return fmt.Sprintf(`
terraform import jenkins_job_gerrit_trigger.main "%v"
`, provider.ResourceJobTriggerId(jobName, propertyId, trigger.Id)) +
terraform import jenkins_job_gerrit_trigger.trigger_%v_%v "%v"
`, propertyIndex, triggerIndex, provider.ResourceJobTriggerId(jobName, propertyId, trigger.Id)) +
jobGerritTriggerOnEventsImportScript(jobName, propertyId, trigger.Id, trigger.TriggerOnEvents) +
jobGerritTriggerProjectsImportScript(jobName, propertyId, trigger.Id, trigger.Projects) +
jobDynamicGerritProjectsImportScript(trigger.DynamicGerritProjects)
Expand Down
12 changes: 6 additions & 6 deletions importer/resource_job_jira_project_property.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@ func init() {
jobPropertyImportScriptFuncs["*client.JobJiraProjectProperty"] = jobJiraProjectPropertyImportScript
}

func jobJiraProjectPropertyCode(propertyInterface client.JobProperty) string {
func jobJiraProjectPropertyCode(propertyIndex int, propertyInterface client.JobProperty) string {
property := propertyInterface.(*client.JobJiraProjectProperty)
return fmt.Sprintf(`
resource "jenkins_job_jira_project_property" "main" {
resource "jenkins_job_jira_project_property" "property_%v" {
job = "${jenkins_job.main.name}"
plugin = "%v"
}
`, property.Plugin)
`, propertyIndex, property.Plugin)
}

func jobJiraProjectPropertyImportScript(jobName string, p client.JobProperty) string {
func jobJiraProjectPropertyImportScript(propertyIndex int, jobName string, p client.JobProperty) string {
return fmt.Sprintf(`
terraform import jenkins_job_jira_project_property.main "%v"
`, provider.ResourceJobPropertyId(jobName, p.GetId()))
terraform import jenkins_job_jira_project_property.property_%v "%v"
`, propertyIndex, provider.ResourceJobPropertyId(jobName, p.GetId()))
}
26 changes: 13 additions & 13 deletions importer/resource_job_pipeline_triggers_property.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ func init() {
}

type ensureJobTriggerFunc func(client.JobTrigger) error
type jobTriggerCodeFunc func(client.JobTrigger) string
type jobTriggerImportScriptFunc func(string, string, client.JobTrigger) string
type jobTriggerCodeFunc func(int, int, client.JobTrigger) string
type jobTriggerImportScriptFunc func(int, int, string, string, client.JobTrigger) string

var ensureJobTriggerFuncs = map[string]ensureJobTriggerFunc{}
var jobTriggerCodeFuncs = map[string]jobTriggerCodeFunc{}
Expand All @@ -38,38 +38,38 @@ func ensureJobPipelineTriggersProperty(propertyInterface client.JobProperty) err
return nil
}

func jobPipelineTriggersPropertyCode(propertyInterface client.JobProperty) string {
func jobPipelineTriggersPropertyCode(propertyIndex int, propertyInterface client.JobProperty) string {
property := propertyInterface.(*client.JobPipelineTriggersProperty)

triggersCode := ""
for _, trigger := range *property.Triggers.Items {
for i, trigger := range *property.Triggers.Items {
reflectType := reflect.TypeOf(trigger).String()
if triggerCodeFunc, ok := jobTriggerCodeFuncs[reflectType]; ok {
triggersCode += triggerCodeFunc(trigger)
triggersCode += triggerCodeFunc(propertyIndex, i+1, trigger)
} else {
log.Println("[WARNING] Unknown Job Trigger Type", reflectType)
}
}
return `
resource "jenkins_job_pipeline_triggers_property" "main" {
return fmt.Sprintf(`
resource "jenkins_job_pipeline_triggers_property" "property_%v" {
job = "${jenkins_job.main.name}"
}
` + triggersCode
`, propertyIndex) + triggersCode
}

func jobPipelineTriggersPropertyImportScript(jobName string, propertyInterface client.JobProperty) string {
func jobPipelineTriggersPropertyImportScript(propertyIndex int, jobName string, propertyInterface client.JobProperty) string {
property := propertyInterface.(*client.JobPipelineTriggersProperty)

triggersCode := ""
for _, trigger := range *property.Triggers.Items {
for i, trigger := range *property.Triggers.Items {
reflectType := reflect.TypeOf(trigger).String()
if triggerCodeFunc, ok := jobTriggerImportScriptFuncs[reflectType]; ok {
triggersCode += triggerCodeFunc(jobName, property.Id, trigger)
triggersCode += triggerCodeFunc(propertyIndex, i+1, jobName, property.Id, trigger)
} else {
log.Println("[WARNING] Unknown Job Trigger Type", reflectType)
}
}
return fmt.Sprintf(`
terraform import jenkins_job_pipeline_triggers_property.main "%v"
`, provider.ResourceJobPropertyId(jobName, property.Id)) + triggersCode
terraform import jenkins_job_pipeline_triggers_property.property_%v "%v"
`, propertyIndex, provider.ResourceJobPropertyId(jobName, property.Id)) + triggersCode
}
12 changes: 6 additions & 6 deletions importer/resource_job_property.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
)

type ensureJobPropertyFunc func(client.JobProperty) error
type jobPropertyCodeFunc func(client.JobProperty) string
type jobPropertyImportScriptFunc func(string, client.JobProperty) string
type jobPropertyCodeFunc func(int, client.JobProperty) string
type jobPropertyImportScriptFunc func(int, string, client.JobProperty) string

var ensureJobPropertyFuncs = map[string]ensureJobPropertyFunc{}
var jobPropertyCodeFuncs = map[string]jobPropertyCodeFunc{}
Expand Down Expand Up @@ -41,10 +41,10 @@ func ensureJobProperties(properties *client.JobProperties) error {
func jobPropertiesCode(properties *client.JobProperties) string {
code := ""

for _, item := range *properties.Items {
for i, item := range *properties.Items {
reflectType := reflect.TypeOf(item).String()
if codeFunc, ok := jobPropertyCodeFuncs[reflectType]; ok {
code += codeFunc(item)
code += codeFunc(i+1, item)
} else {
log.Println("[WARNING] Unknown property type:", reflectType)
}
Expand All @@ -56,10 +56,10 @@ func jobPropertiesCode(properties *client.JobProperties) string {
func jobPropertiesImportScript(jobName string, properties *client.JobProperties) string {
code := ""

for _, item := range *properties.Items {
for i, item := range *properties.Items {
reflectType := reflect.TypeOf(item).String()
if codeFunc, ok := jobPropertyImportScriptFuncs[reflectType]; ok {
code += codeFunc(jobName, item)
code += codeFunc(i+1, jobName, item)
} else {
log.Println("[WARNING] Unknown property type:", reflectType)
}
Expand Down
24 changes: 12 additions & 12 deletions importer/resource_job_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,12 @@ resource "jenkins_job_git_scm_clean_before_checkout_extension" "main" {
scm = "${jenkins_job_git_scm.main.id}"
}
resource "jenkins_job_pipeline_triggers_property" "main" {
resource "jenkins_job_pipeline_triggers_property" "property_1" {
job = "${jenkins_job.main.name}"
}
resource "jenkins_job_gerrit_trigger" "main" {
property = "${jenkins_job_pipeline_triggers_property.main.id}"
resource "jenkins_job_gerrit_trigger" "trigger_1_1" {
property = "${jenkins_job_pipeline_triggers_property.property_1.id}"
plugin = "gerrit-trigger@2.29.0"
server_name = "__ANY__"
Expand Down Expand Up @@ -218,24 +218,24 @@ resource "jenkins_job_gerrit_file_path" "file_path_1_1" {
pattern = "my-file-path"
}
resource "jenkins_job_build_discarder_property" "main" {
resource "jenkins_job_build_discarder_property" "property_2" {
job = "${jenkins_job.main.name}"
}
resource "jenkins_job_build_discarder_property_log_rotator_strategy" "main" {
property = "${jenkins_job_build_discarder_property.main.id}"
property = "${jenkins_job_build_discarder_property.property_2.id}"
days_to_keep = "1"
num_to_keep = "2"
artifact_days_to_keep = "3"
artifact_num_to_keep = "4"
}
resource "jenkins_job_datadog_job_property" "main" {
resource "jenkins_job_datadog_job_property" "property_3" {
job = "${jenkins_job.main.name}"
}
resource "jenkins_job_jira_project_property" "main" {
resource "jenkins_job_jira_project_property" "property_4" {
job = "${jenkins_job.main.name}"
plugin = "jiraPlugin"
Expand Down Expand Up @@ -268,9 +268,9 @@ terraform import jenkins_job_git_scm_branch.branch_1 "Premerge checksdefinition
terraform import jenkins_job_git_scm_clean_before_checkout_extension.main "Premerge checksdefinitionIdextension-id"
terraform import jenkins_job_pipeline_triggers_property.main "Premerge checkstrigger-id"
terraform import jenkins_job_pipeline_triggers_property.property_1 "Premerge checkstrigger-id"
terraform import jenkins_job_gerrit_trigger.main "Premerge checkstrigger-idgerrit-trigger-id"
terraform import jenkins_job_gerrit_trigger.trigger_1_1 "Premerge checkstrigger-idgerrit-trigger-id"
terraform import jenkins_job_gerrit_trigger_change_merged_event.main "Premerge checkstrigger-idgerrit-trigger-idgerritTriggerMergeEventId"
Expand All @@ -284,13 +284,13 @@ terraform import jenkins_job_gerrit_branch.branch_1_1 "Premerge checkstrigger-i
terraform import jenkins_job_gerrit_file_path.file_path_1_1 "Premerge checkstrigger-idgerrit-trigger-idgerritProjectIdgerritFilePathId"
terraform import jenkins_job_build_discarder_property.main "Premerge checksdiscard-id"
terraform import jenkins_job_build_discarder_property.property_2 "Premerge checksdiscard-id"
terraform import jenkins_job_build_discarder_property_log_rotator_strategy.main "Premerge checksdiscard-iddiscardPropertyStrategyId"
terraform import jenkins_job_datadog_job_property.main "Premerge checksdatadogJobPropertyId"
terraform import jenkins_job_datadog_job_property.property_3 "Premerge checksdatadogJobPropertyId"
terraform import jenkins_job_jira_project_property.main "Premerge checksjiraProjectPropertyId"
terraform import jenkins_job_jira_project_property.property_4 "Premerge checksjiraProjectPropertyId"
`
if result != expected {
dmp := diffmatchpatch.New()
Expand Down

0 comments on commit c8e7408

Please sign in to comment.