Skip to content

Commit 8e578ef

Browse files
author
Chase Engelbrecht
committed
Use role name and construct ARN at runtime for scheduler identities
Signed-off-by: Chase Engelbrecht <engechas@dev-dsk-engechas-2a-28f138b0.us-west-2.amazon.com>
1 parent 82ef7f5 commit 8e578ef

9 files changed

Lines changed: 71 additions & 63 deletions

File tree

‎alerting/src/main/kotlin/org/opensearch/alerting/AlertingPlugin.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,8 @@ internal class AlertingPlugin : PainlessExtension, ActionPlugin, ScriptPlugin, R
492492
AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID,
493493
AlertingSettings.JOB_QUEUE_NAME,
494494
AlertingSettings.JOB_QUEUE_MESSAGE_GROUP_KEY_NAME,
495-
AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN,
496-
AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_ARN,
495+
AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME,
496+
AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME,
497497
AlertingSettings.JOB_QUEUE_ACCOUNT_ID,
498498
AlertingSettings.JOB_QUEUE_ACCOUNT_PROVIDER_TYPE,
499499
AlertingSettings.TARGET_TYPE_TO_SERVICE_NAME

‎alerting/src/main/kotlin/org/opensearch/alerting/service/SchedulerRoutingResolver.kt‎

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,35 @@ object SchedulerRoutingResolver {
2121
fun resolve(
2222
settingsAccountId: String,
2323
settingsQueueName: String,
24-
settingsRoleArn: String,
25-
settingsExecutionRoleArn: String? = null,
24+
settingsRoleName: String,
25+
settingsExecutionRoleName: String? = null,
2626
threadContextAccountIdOverride: String?
2727
): Routing? {
2828
val accountId = pickAccountId(settingsAccountId, threadContextAccountIdOverride) ?: return null
2929
val queueName = settingsQueueName.takeIf { it.isNotBlank() } ?: return null
30-
val roleArn = settingsRoleArn.takeIf { it.isNotBlank() } ?: return null
31-
val executionRoleArn = settingsExecutionRoleArn?.takeIf { it.isNotBlank() } ?: return null
32-
return Routing(accountId, queueName, roleArn, executionRoleArn)
30+
val roleName = settingsRoleName.takeIf { it.isNotBlank() } ?: return null
31+
val executionRoleName = settingsExecutionRoleName?.takeIf { it.isNotBlank() } ?: return null
32+
return Routing(accountId, queueName, buildRoleArn(accountId, roleName), buildRoleArn(accountId, executionRoleName))
3333
}
3434

3535
/** Delete only needs accountId + roleArn; queueName is set to empty. */
3636
fun resolveForDelete(
3737
settingsAccountId: String,
38-
settingsRoleArn: String,
38+
settingsRoleName: String,
3939
threadContextAccountIdOverride: String?
4040
): Routing? {
4141
val accountId = pickAccountId(settingsAccountId, threadContextAccountIdOverride) ?: return null
42-
val roleArn = settingsRoleArn.takeIf { it.isNotBlank() } ?: return null
43-
return Routing(accountId, "", roleArn, "")
42+
val roleName = settingsRoleName.takeIf { it.isNotBlank() } ?: return null
43+
return Routing(accountId, "", buildRoleArn(accountId, roleName), "")
4444
}
4545

4646
/** ThreadContext override wins; falls back to plugin setting; null if both are blank. */
4747
private fun pickAccountId(settingValue: String, override: String?): String? {
4848
if (!override.isNullOrBlank()) return override
4949
return settingValue.takeIf { it.isNotBlank() }
5050
}
51+
52+
/** Constructs an IAM role ARN from account ID and role name. */
53+
private fun buildRoleArn(accountId: String, roleName: String): String =
54+
"arn:aws:iam::$accountId:role/$roleName"
5155
}

‎alerting/src/main/kotlin/org/opensearch/alerting/settings/AlertingSettings.kt‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,15 +374,15 @@ class AlertingSettings {
374374
Setting.Property.NodeScope, Setting.Property.Dynamic
375375
)
376376

377-
/** IAM role ARN that EventBridge assumes to send messages to the target SQS queue. */
378-
val EXTERNAL_SCHEDULER_ROLE_ARN = Setting.simpleString(
379-
"plugins.alerting.external_scheduler.role_arn",
377+
/** IAM role name that EventBridge assumes to send messages to the target SQS queue. The full ARN is constructed from the account ID. */
378+
val EXTERNAL_SCHEDULER_ROLE_NAME = Setting.simpleString(
379+
"plugins.alerting.external_scheduler.role_name",
380380
Setting.Property.NodeScope, Setting.Property.Dynamic
381381
)
382382

383-
/** IAM role ARN that EventBridge Scheduler assumes at fire time (Target.roleArn). Required when external scheduler is enabled. */
384-
val EXTERNAL_SCHEDULER_EXECUTION_ROLE_ARN = Setting.simpleString(
385-
"plugins.alerting.external_scheduler.execution_role_arn",
383+
/** IAM role name that EventBridge Scheduler assumes at fire time (Target.roleArn). The full ARN is constructed from the account ID. */
384+
val EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME = Setting.simpleString(
385+
"plugins.alerting.external_scheduler.execution_role_name",
386386
Setting.Property.NodeScope, Setting.Property.Dynamic
387387
)
388388

‎alerting/src/main/kotlin/org/opensearch/alerting/transport/TransportDeleteMonitorAction.kt‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class TransportDeleteMonitorAction @Inject constructor(
6363
@Volatile override var filterByEnabled = AlertingSettings.FILTER_BY_BACKEND_ROLES.get(settings)
6464
@Volatile private var externalSchedulerEnabled = AlertingSettings.EXTERNAL_SCHEDULER_ENABLED.get(settings)
6565
@Volatile private var externalSchedulerAccountId = AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID.get(settings)
66-
@Volatile private var externalSchedulerRoleArn = AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN.get(settings)
66+
@Volatile private var externalSchedulerRoleName = AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME.get(settings)
6767

6868
init {
6969
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED) {
@@ -72,8 +72,8 @@ class TransportDeleteMonitorAction @Inject constructor(
7272
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID) {
7373
externalSchedulerAccountId = it
7474
}
75-
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN) {
76-
externalSchedulerRoleArn = it
75+
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME) {
76+
externalSchedulerRoleName = it
7777
}
7878
listenFilterBySettingChange(clusterService)
7979
}
@@ -152,7 +152,7 @@ class TransportDeleteMonitorAction @Inject constructor(
152152
private fun deleteExternalSchedule(monitor: Monitor) {
153153
val routing = SchedulerRoutingResolver.resolveForDelete(
154154
settingsAccountId = externalSchedulerAccountId,
155-
settingsRoleArn = externalSchedulerRoleArn,
155+
settingsRoleName = externalSchedulerRoleName,
156156
threadContextAccountIdOverride = client.threadPool().threadContext
157157
.getTransient<String>(ExternalSchedulerService.SCHEDULER_ACCOUNT_ID_KEY)
158158
) ?: return

‎alerting/src/main/kotlin/org/opensearch/alerting/transport/TransportIndexMonitorAction.kt‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ class TransportIndexMonitorAction @Inject constructor(
127127
@Volatile private var externalSchedulerEnabled = AlertingSettings.EXTERNAL_SCHEDULER_ENABLED.get(settings)
128128
@Volatile private var externalSchedulerAccountId = AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID.get(settings)
129129
@Volatile private var jobQueueName = AlertingSettings.JOB_QUEUE_NAME.get(settings)
130-
@Volatile private var externalSchedulerRoleArn = AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN.get(settings)
131-
@Volatile private var externalSchedulerExecutionRoleArn = AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_ARN.get(settings)
130+
@Volatile private var externalSchedulerRoleName = AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME.get(settings)
131+
@Volatile private var externalSchedulerExecutionRoleName = AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME.get(settings)
132132

133133
private val multiTenancyEnabled = AlertingSettings.MULTI_TENANCY_ENABLED.get(settings)
134134

@@ -151,11 +151,11 @@ class TransportIndexMonitorAction @Inject constructor(
151151
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.JOB_QUEUE_NAME) {
152152
jobQueueName = it
153153
}
154-
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN) {
155-
externalSchedulerRoleArn = it
154+
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME) {
155+
externalSchedulerRoleName = it
156156
}
157-
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_ARN) {
158-
externalSchedulerExecutionRoleArn = it
157+
clusterService.clusterSettings.addSettingsUpdateConsumer(AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME) {
158+
externalSchedulerExecutionRoleName = it
159159
}
160160
listenFilterBySettingChange(clusterService)
161161
}
@@ -918,8 +918,8 @@ class TransportIndexMonitorAction @Inject constructor(
918918
private fun resolveRouting(): SchedulerRoutingResolver.Routing? = SchedulerRoutingResolver.resolve(
919919
settingsAccountId = externalSchedulerAccountId,
920920
settingsQueueName = jobQueueName,
921-
settingsRoleArn = externalSchedulerRoleArn,
922-
settingsExecutionRoleArn = externalSchedulerExecutionRoleArn,
921+
settingsRoleName = externalSchedulerRoleName,
922+
settingsExecutionRoleName = externalSchedulerExecutionRoleName,
923923
threadContextAccountIdOverride = client.threadPool().threadContext
924924
.getTransient<String>(ExternalSchedulerService.SCHEDULER_ACCOUNT_ID_KEY)
925925
)

‎alerting/src/test/kotlin/org/opensearch/alerting/service/SchedulerRoutingResolverTests.kt‎

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,80 +13,82 @@ class SchedulerRoutingResolverTests {
1313

1414
private val acct = "111111111111"
1515
private val override = "999999999999"
16-
private val queue = "arn:aws:sqs:us-east-1:111:queue"
17-
private val role = "arn:aws:iam::111:role/eb"
18-
private val execRole = "arn:aws:iam::111:role/eb-exec"
16+
private val queue = "my-queue"
17+
private val roleName = "eb-role"
18+
private val execRoleName = "eb-exec-role"
1919

2020
// ---------- resolve() — create/update path ----------
2121

2222
@Test fun `resolve uses plugin settings when no override`() {
23-
val r = SchedulerRoutingResolver.resolve(acct, queue, role, execRole, threadContextAccountIdOverride = null)!!
23+
val r = SchedulerRoutingResolver.resolve(acct, queue, roleName, execRoleName, threadContextAccountIdOverride = null)!!
2424
assertEquals(acct, r.accountId)
2525
assertEquals(queue, r.queueName)
26-
assertEquals(role, r.roleArn)
27-
assertEquals(execRole, r.executionRoleArn)
26+
assertEquals("arn:aws:iam::$acct:role/$roleName", r.roleArn)
27+
assertEquals("arn:aws:iam::$acct:role/$execRoleName", r.executionRoleArn)
2828
}
2929

30-
@Test fun `resolve applies ThreadContext override for accountId`() {
31-
val r = SchedulerRoutingResolver.resolve(acct, queue, role, execRole, threadContextAccountIdOverride = override)!!
30+
@Test fun `resolve applies ThreadContext override for accountId and constructs ARN with override`() {
31+
val r = SchedulerRoutingResolver.resolve(acct, queue, roleName, execRoleName, threadContextAccountIdOverride = override)!!
3232
assertEquals(override, r.accountId)
33+
assertEquals("arn:aws:iam::$override:role/$roleName", r.roleArn)
34+
assertEquals("arn:aws:iam::$override:role/$execRoleName", r.executionRoleArn)
3335
}
3436

3537
@Test fun `resolve treats blank override as absent`() {
36-
val r = SchedulerRoutingResolver.resolve(acct, queue, role, execRole, threadContextAccountIdOverride = " ")!!
38+
val r = SchedulerRoutingResolver.resolve(acct, queue, roleName, execRoleName, threadContextAccountIdOverride = " ")!!
3739
assertEquals(acct, r.accountId)
3840
}
3941

4042
@Test fun `resolve returns null when accountId missing in both setting and override`() {
41-
assertNull(SchedulerRoutingResolver.resolve("", queue, role, execRole, threadContextAccountIdOverride = null))
42-
assertNull(SchedulerRoutingResolver.resolve("", queue, role, execRole, threadContextAccountIdOverride = ""))
43+
assertNull(SchedulerRoutingResolver.resolve("", queue, roleName, execRoleName, threadContextAccountIdOverride = null))
44+
assertNull(SchedulerRoutingResolver.resolve("", queue, roleName, execRoleName, threadContextAccountIdOverride = ""))
4345
}
4446

4547
@Test fun `resolve still succeeds when setting blank but override provided`() {
46-
val r = SchedulerRoutingResolver.resolve("", queue, role, execRole, threadContextAccountIdOverride = override)!!
48+
val r = SchedulerRoutingResolver.resolve("", queue, roleName, execRoleName, threadContextAccountIdOverride = override)!!
4749
assertEquals(override, r.accountId)
4850
}
4951

5052
@Test fun `resolve returns null when queueName blank`() {
51-
assertNull(SchedulerRoutingResolver.resolve(acct, "", role, execRole, threadContextAccountIdOverride = null))
53+
assertNull(SchedulerRoutingResolver.resolve(acct, "", roleName, execRoleName, threadContextAccountIdOverride = null))
5254
}
5355

54-
@Test fun `resolve returns null when roleArn blank`() {
55-
assertNull(SchedulerRoutingResolver.resolve(acct, queue, "", execRole, threadContextAccountIdOverride = null))
56+
@Test fun `resolve returns null when roleName blank`() {
57+
assertNull(SchedulerRoutingResolver.resolve(acct, queue, "", execRoleName, threadContextAccountIdOverride = null))
5658
}
5759

58-
@Test fun `resolve returns null when executionRoleArn blank`() {
59-
assertNull(SchedulerRoutingResolver.resolve(acct, queue, role, " ", threadContextAccountIdOverride = null))
60+
@Test fun `resolve returns null when executionRoleName blank`() {
61+
assertNull(SchedulerRoutingResolver.resolve(acct, queue, roleName, " ", threadContextAccountIdOverride = null))
6062
}
6163

62-
@Test fun `resolve returns null when executionRoleArn omitted`() {
63-
assertNull(SchedulerRoutingResolver.resolve(acct, queue, role, threadContextAccountIdOverride = null))
64+
@Test fun `resolve returns null when executionRoleName omitted`() {
65+
assertNull(SchedulerRoutingResolver.resolve(acct, queue, roleName, threadContextAccountIdOverride = null))
6466
}
6567

6668
// ---------- resolveForDelete() ----------
6769

6870
@Test fun `resolveForDelete uses plugin settings when no override`() {
69-
val r = SchedulerRoutingResolver.resolveForDelete(acct, role, threadContextAccountIdOverride = null)!!
71+
val r = SchedulerRoutingResolver.resolveForDelete(acct, roleName, threadContextAccountIdOverride = null)!!
7072
assertEquals(acct, r.accountId)
71-
assertEquals(role, r.roleArn)
73+
assertEquals("arn:aws:iam::$acct:role/$roleName", r.roleArn)
7274
}
7375

74-
@Test fun `resolveForDelete applies ThreadContext override`() {
75-
val r = SchedulerRoutingResolver.resolveForDelete(acct, role, threadContextAccountIdOverride = override)!!
76+
@Test fun `resolveForDelete applies ThreadContext override and constructs ARN with override`() {
77+
val r = SchedulerRoutingResolver.resolveForDelete(acct, roleName, threadContextAccountIdOverride = override)!!
7678
assertEquals(override, r.accountId)
79+
assertEquals("arn:aws:iam::$override:role/$roleName", r.roleArn)
7780
}
7881

7982
@Test fun `resolveForDelete returns null when accountId missing`() {
80-
assertNull(SchedulerRoutingResolver.resolveForDelete("", role, threadContextAccountIdOverride = null))
83+
assertNull(SchedulerRoutingResolver.resolveForDelete("", roleName, threadContextAccountIdOverride = null))
8184
}
8285

83-
@Test fun `resolveForDelete returns null when roleArn missing`() {
86+
@Test fun `resolveForDelete returns null when roleName missing`() {
8487
assertNull(SchedulerRoutingResolver.resolveForDelete(acct, "", threadContextAccountIdOverride = null))
8588
}
8689

8790
@Test fun `resolveForDelete does not require queueName`() {
88-
// No queueName parameter at all — setup covers delete path independent of create/update
89-
val r = SchedulerRoutingResolver.resolveForDelete(acct, role, threadContextAccountIdOverride = null)
91+
val r = SchedulerRoutingResolver.resolveForDelete(acct, roleName, threadContextAccountIdOverride = null)
9092
assertEquals(acct, r?.accountId)
9193
}
9294
}

‎alerting/src/test/kotlin/org/opensearch/alerting/transport/TransportDeleteMonitorActionTests.kt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class TransportDeleteMonitorActionTests : OpenSearchTestCase() {
6464
settingSet.add(AlertingSettings.FILTER_BY_BACKEND_ROLES)
6565
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED)
6666
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID)
67-
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN)
67+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME)
6868
val clusterSettings = ClusterSettings(Settings.EMPTY, settingSet)
6969
whenever(clusterService.clusterSettings).thenReturn(clusterSettings)
7070
}
@@ -123,15 +123,15 @@ class TransportDeleteMonitorActionTests : OpenSearchTestCase() {
123123
val settings = Settings.builder()
124124
.put("plugins.alerting.external_scheduler.enabled", true)
125125
.put("plugins.alerting.external_scheduler.account_id", "111111111111")
126-
.put("plugins.alerting.external_scheduler.role_arn", "arn:aws:iam::111:role/eb")
126+
.put("plugins.alerting.external_scheduler.role_name", "eb")
127127
.build()
128128

129129
val settingSet = hashSetOf<Setting<*>>()
130130
settingSet.addAll(ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)
131131
settingSet.add(AlertingSettings.FILTER_BY_BACKEND_ROLES)
132132
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED)
133133
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID)
134-
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN)
134+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME)
135135
val cs = ClusterSettings(settings, settingSet)
136136
whenever(clusterService.clusterSettings).thenReturn(cs)
137137

‎alerting/src/test/kotlin/org/opensearch/alerting/transport/TransportIndexMonitorActionTests.kt‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ class TransportIndexMonitorActionTests : OpenSearchTestCase() {
6666
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED)
6767
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID)
6868
settingSet.add(AlertingSettings.JOB_QUEUE_NAME)
69-
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN)
69+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME)
70+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME)
7071
return ClusterSettings(settings, settingSet)
7172
}
7273

@@ -101,7 +102,7 @@ class TransportIndexMonitorActionTests : OpenSearchTestCase() {
101102
.put("plugins.alerting.external_scheduler.enabled", true)
102103
.put("plugins.alerting.external_scheduler.account_id", "111111111111")
103104
.put("plugins.alerting.external_scheduler.queue_arn", "arn:aws:sqs:us-east-1:111:queue")
104-
.put("plugins.alerting.external_scheduler.role_arn", "arn:aws:iam::111:role/eb")
105+
.put("plugins.alerting.external_scheduler.role_name", "eb")
105106
.build()
106107

107108
val action = createAction(settings)
@@ -127,7 +128,7 @@ class TransportIndexMonitorActionTests : OpenSearchTestCase() {
127128
assertTrue(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED.isDynamic)
128129
assertTrue(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID.isDynamic)
129130
assertTrue(AlertingSettings.JOB_QUEUE_NAME.isDynamic)
130-
assertTrue(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN.isDynamic)
131+
assertTrue(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME.isDynamic)
131132
}
132133

133134
fun `test scheduler enabled defaults to false`() {
@@ -138,7 +139,7 @@ class TransportIndexMonitorActionTests : OpenSearchTestCase() {
138139
fun `test scheduler string settings default to empty`() {
139140
assertEquals("", AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID.get(Settings.EMPTY))
140141
assertEquals("", AlertingSettings.JOB_QUEUE_NAME.get(Settings.EMPTY))
141-
assertEquals("", AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN.get(Settings.EMPTY))
142+
assertEquals("", AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME.get(Settings.EMPTY))
142143
}
143144

144145
fun `test multi-tenancy enabled skips scheduled job index init`() {

‎alerting/src/test/kotlin/org/opensearch/alerting/transport/TransportMultiTenancyBlockTests.kt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ class TransportMultiTenancyBlockTests : OpenSearchTestCase() {
125125
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ENABLED)
126126
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ACCOUNT_ID)
127127
settingSet.add(AlertingSettings.JOB_QUEUE_NAME)
128-
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_ARN)
128+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_ROLE_NAME)
129+
settingSet.add(AlertingSettings.EXTERNAL_SCHEDULER_EXECUTION_ROLE_NAME)
129130
val clusterSettings = ClusterSettings(multiTenancySettings, settingSet)
130131
whenever(clusterService.clusterSettings).thenReturn(clusterSettings)
131132

0 commit comments

Comments
 (0)