Skip to content

Commit

Permalink
allow for more flexible JSM integration (#15)
Browse files Browse the repository at this point in the history
* allow for more flexible JSM integration

* make slack PD integration optional

* make slack PD integration optional

* overhauled to use the new cloud mapping rule resource in PD - though miffed to find there's a bug in it so jira_value custom fields are not working
  • Loading branch information
cdaniluk authored Jan 15, 2025
1 parent b0c055c commit 106b5bd
Show file tree
Hide file tree
Showing 10 changed files with 800 additions and 60 deletions.
78 changes: 68 additions & 10 deletions README.md

Large diffs are not rendered by default.

117 changes: 111 additions & 6 deletions account.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ resource "pagerduty_service_dependency" "account" {
}

resource "pagerduty_slack_connection" "account" {
count = var.slack_customer_success_team_channel != null ? 1 : 0

channel_id = var.slack_customer_success_team_channel
notification_type = "responder"
source_id = pagerduty_service.account.id
Expand Down Expand Up @@ -60,9 +62,112 @@ resource "pagerduty_service_integration" "account" {
vendor = data.pagerduty_vendor.datadog.id
}

resource "pagerduty_extension" "account" {
name = "jira-${pagerduty_service.account.id}"
config = templatefile("${path.module}/jira.json.tpl", { organization_id = var.jira_organization_id })
extension_objects = [pagerduty_service.account.id]
extension_schema = data.pagerduty_extension_schema.jira.id
}
resource "pagerduty_jira_cloud_account_mapping_rule" "account" {
name = "jira-${pagerduty_service.account.id}"
account_mapping = data.pagerduty_jira_cloud_account_mapping.account.id

config {
service = pagerduty_service.account.id
jira {
create_issue_on_incident_trigger = data.aws_ssm_parameter.jira_account_create_issue_on_incident_trigger.value
sync_notes_user = data.pagerduty_user.account_user.id

custom_fields {
source_incident_field = "incident_description"
target_issue_field = "description"
target_issue_field_name = "Description"
type = "attribute"
}

custom_fields {
source_incident_field = "incident_title"
target_issue_field = "summary"
target_issue_field_name = "Summary"
type = "attribute"
}

custom_fields {
target_issue_field = "customfield_10002"
target_issue_field_name = "Organization"
type = "const"
value = var.jira_organization_id
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_account_custom_jira_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "jira_value"
value = custom_fields.value.value
}
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_account_custom_fixed_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "const"
value = custom_fields.value.value
}
}

issue_type {
id = data.aws_ssm_parameter.jira_account_issue_type_id.value
name = data.aws_ssm_parameter.jira_account_issue_type_name.value
}

priorities {
jira_id = "10000"
pagerduty_id = data.pagerduty_priority.p1.id
}

priorities {
jira_id = "2"
pagerduty_id = data.pagerduty_priority.p2.id
}

priorities {
jira_id = "3"
pagerduty_id = data.pagerduty_priority.p3.id
}


priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p4.id
}

priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p5.id
}

project {
id = data.aws_ssm_parameter.jira_account_project_id.value
key = data.aws_ssm_parameter.jira_account_project_key.value
name = data.aws_ssm_parameter.jira_account_project_name.value
}

status_mapping {

acknowledged {
id = "3"
name = "In Progress"
}
resolved {
id = "5"
name = "Resolved"
}
triggered {
id = "1"
name = "Open"
}
}

}
}
}
117 changes: 111 additions & 6 deletions compliance.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ resource "pagerduty_service_dependency" "compliance" {
}

resource "pagerduty_slack_connection" "compliance" {
count = var.slack_compliance_team_channel != null ? 1 : 0

channel_id = var.slack_compliance_team_channel
notification_type = "responder"
source_id = pagerduty_service.compliance.id
Expand Down Expand Up @@ -60,9 +62,112 @@ resource "pagerduty_service_integration" "compliance" {
vendor = data.pagerduty_vendor.datadog.id
}

resource "pagerduty_extension" "compliance" {
name = "jira-${pagerduty_service.compliance.id}"
config = templatefile("${path.module}/jira.json.tpl", { organization_id = var.jira_organization_id })
extension_objects = [pagerduty_service.compliance.id]
extension_schema = data.pagerduty_extension_schema.jira.id
}
resource "pagerduty_jira_cloud_account_mapping_rule" "compliance" {
name = "jira-${pagerduty_service.compliance.id}"
account_mapping = data.pagerduty_jira_cloud_account_mapping.compliance.id

config {
service = pagerduty_service.compliance.id
jira {
create_issue_on_incident_trigger = data.aws_ssm_parameter.jira_account_create_issue_on_incident_trigger.value
sync_notes_user = data.pagerduty_user.account_user.id

custom_fields {
source_incident_field = "incident_description"
target_issue_field = "description"
target_issue_field_name = "Description"
type = "attribute"
}

custom_fields {
source_incident_field = "incident_title"
target_issue_field = "summary"
target_issue_field_name = "Summary"
type = "attribute"
}

custom_fields {
target_issue_field = "customfield_10002"
target_issue_field_name = "Organization"
type = "const"
value = var.jira_organization_id
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_compliance_custom_jira_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "jira_value"
value = custom_fields.value.value
}
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_compliance_custom_fixed_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "const"
value = custom_fields.value.value
}
}

issue_type {
id = data.aws_ssm_parameter.jira_compliance_issue_type_id.value
name = data.aws_ssm_parameter.jira_compliance_issue_type_name.value
}

priorities {
jira_id = "10000"
pagerduty_id = data.pagerduty_priority.p1.id
}

priorities {
jira_id = "2"
pagerduty_id = data.pagerduty_priority.p2.id
}

priorities {
jira_id = "3"
pagerduty_id = data.pagerduty_priority.p3.id
}


priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p4.id
}

priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p5.id
}

project {
id = data.aws_ssm_parameter.jira_compliance_project_id.value
key = data.aws_ssm_parameter.jira_compliance_project_key.value
name = data.aws_ssm_parameter.jira_compliance_project_name.value
}

status_mapping {

acknowledged {
id = "3"
name = "In Progress"
}
resolved {
id = "5"
name = "Resolved"
}
triggered {
id = "1"
name = "Open"
}
}

}
}
}
117 changes: 111 additions & 6 deletions cost.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ resource "pagerduty_service_dependency" "cost" {
}

resource "pagerduty_slack_connection" "cost" {
count = var.slack_customer_success_team_channel != null ? 1 : 0

channel_id = var.slack_customer_success_team_channel
notification_type = "responder"
source_id = pagerduty_service.cost.id
Expand Down Expand Up @@ -60,9 +62,112 @@ resource "pagerduty_service_integration" "cost" {
vendor = data.pagerduty_vendor.datadog.id
}

resource "pagerduty_extension" "cost" {
name = "jira-${pagerduty_service.cost.id}"
config = templatefile("${path.module}/jira.json.tpl", { organization_id = var.jira_organization_id })
extension_objects = [pagerduty_service.cost.id]
extension_schema = data.pagerduty_extension_schema.jira.id
}
resource "pagerduty_jira_cloud_account_mapping_rule" "cost" {
name = "jira-${pagerduty_service.cost.id}"
account_mapping = data.pagerduty_jira_cloud_account_mapping.cost.id

config {
service = pagerduty_service.cost.id
jira {
create_issue_on_incident_trigger = data.aws_ssm_parameter.jira_cost_create_issue_on_incident_trigger.value
sync_notes_user = data.pagerduty_user.cost_user.id

custom_fields {
source_incident_field = "incident_description"
target_issue_field = "description"
target_issue_field_name = "Description"
type = "attribute"
}

custom_fields {
source_incident_field = "incident_title"
target_issue_field = "summary"
target_issue_field_name = "Summary"
type = "attribute"
}

custom_fields {
target_issue_field = "customfield_10002"
target_issue_field_name = "Organization"
type = "const"
value = var.jira_organization_id
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_cost_custom_jira_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "jira_value"
value = custom_fields.value.value
}
}

dynamic "custom_fields" {
for_each = jsondecode(nonsensitive(data.aws_ssm_parameter.jira_cost_custom_fixed_fields.value))

content {
target_issue_field = custom_fields.value.target_issue_field
target_issue_field_name = custom_fields.value.target_issue_field_name
type = "const"
value = custom_fields.value.value
}
}

issue_type {
id = data.aws_ssm_parameter.jira_cost_issue_type_id.value
name = data.aws_ssm_parameter.jira_cost_issue_type_name.value
}

priorities {
jira_id = "10000"
pagerduty_id = data.pagerduty_priority.p1.id
}

priorities {
jira_id = "2"
pagerduty_id = data.pagerduty_priority.p2.id
}

priorities {
jira_id = "3"
pagerduty_id = data.pagerduty_priority.p3.id
}


priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p4.id
}

priorities {
jira_id = "4"
pagerduty_id = data.pagerduty_priority.p5.id
}

project {
id = data.aws_ssm_parameter.jira_cost_project_id.value
key = data.aws_ssm_parameter.jira_cost_project_key.value
name = data.aws_ssm_parameter.jira_cost_project_name.value
}

status_mapping {

acknowledged {
id = "3"
name = "In Progress"
}
resolved {
id = "5"
name = "Resolved"
}
triggered {
id = "1"
name = "Open"
}
}

}
}
}
Loading

0 comments on commit 106b5bd

Please sign in to comment.