This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new adfa1c152253 CAMEL-22804 - Camel-AWS-IAM: Support more operations
based on the API available (#20938)
adfa1c152253 is described below
commit adfa1c1522532996db407b013f7a3d1fb692cfed
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Jan 20 15:04:08 2026 +0100
CAMEL-22804 - Camel-AWS-IAM: Support more operations based on the API
available (#20938)
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../apache/camel/catalog/components/aws2-iam.json | 22 +-
.../apache/camel/component/aws2/iam/aws2-iam.json | 22 +-
.../src/main/docs/aws2-iam-component.adoc | 215 +++++++++
.../camel/component/aws2/iam/IAM2Constants.java | 38 ++
.../camel/component/aws2/iam/IAM2Operations.java | 26 +-
.../camel/component/aws2/iam/IAM2Producer.java | 516 +++++++++++++++++++++
.../component/aws2/iam/AmazonIAMClientMock.java | 222 +++++++++
.../camel/component/aws2/iam/IAMProducerTest.java | 394 ++++++++++++++++
.../endpoint/dsl/IAM2EndpointBuilderFactory.java | 193 ++++++++
9 files changed, 1641 insertions(+), 7 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-iam.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-iam.json
index c1d3d6027367..2f837b11dace 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-iam.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-iam.json
@@ -27,7 +27,7 @@
"configuration": { "index": 0, "kind": "property", "displayName":
"Configuration", "group": "producer", "label": "", "required": false, "type":
"object", "javaType": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"deprecated": false, "autowired": false, "secret": false, "description":
"Component configuration" },
"iamClient": { "index": 1, "kind": "property", "displayName": "Iam
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "software.amazon.awssdk.services.iam.IamClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"configurationField": "configuration", "description": "To use an existing
configured AWS IAM client" },
"lazyStartProducer": { "index": 2, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
- "operation": { "index": 3, "kind": "property", "displayName": "Operation",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "org.apache.camel.component.aws2.iam.IAM2Operations", "enum": [
"listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup" ],
"deprecated": false, "autowired": false, "secret": fal [...]
+ "operation": { "index": 3, "kind": "property", "displayName": "Operation",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "org.apache.camel.component.aws2.iam.IAM2Operations", "enum": [
"listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup",
"createRole", "deleteRole", "getRole", "listRoles", "cre [...]
"overrideEndpoint": { "index": 4, "kind": "property", "displayName":
"Override Endpoint", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Set the need for overriding the endpoint. This
option needs to be used in combination wi [...]
"pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo
Request", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "If we want to use a POJO request as body or
not" },
"region": { "index": 6, "kind": "property", "displayName": "Region",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1",
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1",
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-north [...]
@@ -61,12 +61,28 @@
"CamelAwsIAMUserArn": { "index": 10, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved user",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#USER_ARN" },
"CamelAwsIAMUserId": { "index": 11, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved user",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#USER_ID" },
"CamelAwsIAMGroupArn": { "index": 12, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ARN" },
- "CamelAwsIAMGroupId": { "index": 13, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ID" }
+ "CamelAwsIAMGroupId": { "index": 13, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ID" },
+ "CamelAwsIAMRoleName": { "index": 14, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The name of an AWS IAM Role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_NAME" },
+ "CamelAwsIAMRolePath": { "index": 15, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The path of an AWS IAM Role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_PATH" },
+ "CamelAwsIAMAssumeRolePolicyDocument": { "index": 16, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The assume role policy document for the
role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ASSUME_ROLE_POLICY_DOCUMENT"
},
+ "CamelAwsIAMRoleArn": { "index": 17, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved role",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_ARN" },
+ "CamelAwsIAMRoleId": { "index": 18, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved role",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_ID" },
+ "CamelAwsIAMRoleDescription": { "index": 19, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The description of an AWS IAM Role",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_DESCRIPTION" },
+ "CamelAwsIAMPolicyName": { "index": 20, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The name of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_NAME" },
+ "CamelAwsIAMPolicyPath": { "index": 21, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The path of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_PATH" },
+ "CamelAwsIAMPolicyDocument": { "index": 22, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The policy document", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_DOCUMENT" },
+ "CamelAwsIAMPolicyArn": { "index": 23, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_ARN" },
+ "CamelAwsIAMPolicyId": { "index": 24, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_ID" },
+ "CamelAwsIAMPolicyDescription": { "index": 25, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The description of an AWS IAM Policy",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_DESCRIPTION" },
+ "CamelAwsIAMInstanceProfileName": { "index": 26, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The name of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_NAME" },
+ "CamelAwsIAMInstanceProfilePath": { "index": 27, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The path of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_PATH" },
+ "CamelAwsIAMInstanceProfileArn": { "index": 28, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The ARN of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_ARN" },
+ "CamelAwsIAMInstanceProfileId": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The ID of an AWS IAM Instance Profile",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_ID" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group":
"producer", "label": "", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Logical name" },
"iamClient": { "index": 1, "kind": "parameter", "displayName": "Iam
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "software.amazon.awssdk.services.iam.IamClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"configurationField": "configuration", "description": "To use an existing
configured AWS IAM client" },
- "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "org.apache.camel.component.aws2.iam.IAM2Operations",
"enum": [ "listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup" ],
"deprecated": false, "autowired": false, "secret": fa [...]
+ "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "org.apache.camel.component.aws2.iam.IAM2Operations",
"enum": [ "listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup",
"createRole", "deleteRole", "getRole", "listRoles", "cr [...]
"overrideEndpoint": { "index": 3, "kind": "parameter", "displayName":
"Override Endpoint", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Set the need for overriding the endpoint. This
option needs to be used in combination w [...]
"pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo
Request", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "If we want to use a POJO request as body or
not" },
"region": { "index": 5, "kind": "parameter", "displayName": "Region",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1",
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1",
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-nort [...]
diff --git
a/components/camel-aws/camel-aws2-iam/src/generated/resources/META-INF/org/apache/camel/component/aws2/iam/aws2-iam.json
b/components/camel-aws/camel-aws2-iam/src/generated/resources/META-INF/org/apache/camel/component/aws2/iam/aws2-iam.json
index c1d3d6027367..2f837b11dace 100644
---
a/components/camel-aws/camel-aws2-iam/src/generated/resources/META-INF/org/apache/camel/component/aws2/iam/aws2-iam.json
+++
b/components/camel-aws/camel-aws2-iam/src/generated/resources/META-INF/org/apache/camel/component/aws2/iam/aws2-iam.json
@@ -27,7 +27,7 @@
"configuration": { "index": 0, "kind": "property", "displayName":
"Configuration", "group": "producer", "label": "", "required": false, "type":
"object", "javaType": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"deprecated": false, "autowired": false, "secret": false, "description":
"Component configuration" },
"iamClient": { "index": 1, "kind": "property", "displayName": "Iam
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "software.amazon.awssdk.services.iam.IamClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"configurationField": "configuration", "description": "To use an existing
configured AWS IAM client" },
"lazyStartProducer": { "index": 2, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
- "operation": { "index": 3, "kind": "property", "displayName": "Operation",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "org.apache.camel.component.aws2.iam.IAM2Operations", "enum": [
"listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup" ],
"deprecated": false, "autowired": false, "secret": fal [...]
+ "operation": { "index": 3, "kind": "property", "displayName": "Operation",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "org.apache.camel.component.aws2.iam.IAM2Operations", "enum": [
"listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup",
"createRole", "deleteRole", "getRole", "listRoles", "cre [...]
"overrideEndpoint": { "index": 4, "kind": "property", "displayName":
"Override Endpoint", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Set the need for overriding the endpoint. This
option needs to be used in combination wi [...]
"pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo
Request", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "If we want to use a POJO request as body or
not" },
"region": { "index": 6, "kind": "property", "displayName": "Region",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1",
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1",
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-north [...]
@@ -61,12 +61,28 @@
"CamelAwsIAMUserArn": { "index": 10, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved user",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#USER_ARN" },
"CamelAwsIAMUserId": { "index": 11, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved user",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#USER_ID" },
"CamelAwsIAMGroupArn": { "index": 12, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ARN" },
- "CamelAwsIAMGroupId": { "index": 13, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ID" }
+ "CamelAwsIAMGroupId": { "index": 13, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved group",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#GROUP_ID" },
+ "CamelAwsIAMRoleName": { "index": 14, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The name of an AWS IAM Role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_NAME" },
+ "CamelAwsIAMRolePath": { "index": 15, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The path of an AWS IAM Role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_PATH" },
+ "CamelAwsIAMAssumeRolePolicyDocument": { "index": 16, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The assume role policy document for the
role", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ASSUME_ROLE_POLICY_DOCUMENT"
},
+ "CamelAwsIAMRoleArn": { "index": 17, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of the created or retrieved role",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_ARN" },
+ "CamelAwsIAMRoleId": { "index": 18, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the created or retrieved role",
"constantName": "org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_ID" },
+ "CamelAwsIAMRoleDescription": { "index": 19, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The description of an AWS IAM Role",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#ROLE_DESCRIPTION" },
+ "CamelAwsIAMPolicyName": { "index": 20, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The name of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_NAME" },
+ "CamelAwsIAMPolicyPath": { "index": 21, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The path of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_PATH" },
+ "CamelAwsIAMPolicyDocument": { "index": 22, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The policy document", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_DOCUMENT" },
+ "CamelAwsIAMPolicyArn": { "index": 23, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ARN of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_ARN" },
+ "CamelAwsIAMPolicyId": { "index": 24, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of an AWS IAM Policy", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_ID" },
+ "CamelAwsIAMPolicyDescription": { "index": 25, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The description of an AWS IAM Policy",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#POLICY_DESCRIPTION" },
+ "CamelAwsIAMInstanceProfileName": { "index": 26, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The name of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_NAME" },
+ "CamelAwsIAMInstanceProfilePath": { "index": 27, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The path of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_PATH" },
+ "CamelAwsIAMInstanceProfileArn": { "index": 28, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The ARN of an AWS IAM Instance
Profile", "constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_ARN" },
+ "CamelAwsIAMInstanceProfileId": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The ID of an AWS IAM Instance Profile",
"constantName":
"org.apache.camel.component.aws2.iam.IAM2Constants#INSTANCE_PROFILE_ID" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group":
"producer", "label": "", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Logical name" },
"iamClient": { "index": 1, "kind": "parameter", "displayName": "Iam
Client", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "software.amazon.awssdk.services.iam.IamClient", "deprecated":
false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration",
"configurationField": "configuration", "description": "To use an existing
configured AWS IAM client" },
- "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "org.apache.camel.component.aws2.iam.IAM2Operations",
"enum": [ "listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup" ],
"deprecated": false, "autowired": false, "secret": fa [...]
+ "operation": { "index": 2, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "org.apache.camel.component.aws2.iam.IAM2Operations",
"enum": [ "listAccessKeys", "createUser", "deleteUser", "getUser", "listUsers",
"createAccessKey", "deleteAccessKey", "updateAccessKey", "createGroup",
"deleteGroup", "listGroups", "addUserToGroup", "removeUserFromGroup",
"createRole", "deleteRole", "getRole", "listRoles", "cr [...]
"overrideEndpoint": { "index": 3, "kind": "parameter", "displayName":
"Override Endpoint", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "Set the need for overriding the endpoint. This
option needs to be used in combination w [...]
"pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo
Request", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField":
"configuration", "description": "If we want to use a POJO request as body or
not" },
"region": { "index": 5, "kind": "parameter", "displayName": "Region",
"group": "producer", "label": "", "required": false, "type": "enum",
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1",
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1",
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-nort [...]
diff --git
a/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
b/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
index 98023eefa54d..5c0e173f3f49 100644
--- a/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
+++ b/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
@@ -92,6 +92,26 @@ Camel-AWS2 IAM component provides the following operation on
the producer side:
- listGroups
- addUserToGroup
- removeUserFromGroup
+- createRole
+- deleteRole
+- getRole
+- listRoles
+- createPolicy
+- deletePolicy
+- getPolicy
+- listPolicies
+- attachUserPolicy
+- detachUserPolicy
+- attachGroupPolicy
+- detachGroupPolicy
+- attachRolePolicy
+- detachRolePolicy
+- createInstanceProfile
+- deleteInstanceProfile
+- getInstanceProfile
+- listInstanceProfiles
+- addRoleToInstanceProfile
+- removeRoleFromInstanceProfile
== Examples
@@ -149,6 +169,201 @@ from("direct:listUsers")
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listGroups")
--------------------------------------------------------------------------------
+==== Role Operations
+
+- createRole: this operation will create a role in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:createRole")
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+ .setHeader(IAM2Constants.ASSUME_ROLE_POLICY_DOCUMENT, constant("{...}"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createRole")
+--------------------------------------------------------------------------------
+
+- deleteRole: this operation will delete a role in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:deleteRole")
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteRole")
+--------------------------------------------------------------------------------
+
+- getRole: this operation will get a role in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:getRole")
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getRole")
+--------------------------------------------------------------------------------
+
+- listRoles: this operation will list the roles in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:listRoles")
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listRoles")
+--------------------------------------------------------------------------------
+
+==== Policy Operations
+
+- createPolicy: this operation will create a policy in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:createPolicy")
+ .setHeader(IAM2Constants.POLICY_NAME, constant("myPolicy"))
+ .setHeader(IAM2Constants.POLICY_DOCUMENT, constant("{...}"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createPolicy")
+--------------------------------------------------------------------------------
+
+- deletePolicy: this operation will delete a policy in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:deletePolicy")
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deletePolicy")
+--------------------------------------------------------------------------------
+
+- getPolicy: this operation will get a policy in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:getPolicy")
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getPolicy")
+--------------------------------------------------------------------------------
+
+- listPolicies: this operation will list the policies in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:listPolicies")
+ .to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listPolicies")
+--------------------------------------------------------------------------------
+
+==== Policy Attachment Operations
+
+- attachUserPolicy: this operation will attach a policy to a user
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:attachUserPolicy")
+ .setHeader(IAM2Constants.USERNAME, constant("camel"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachUserPolicy")
+--------------------------------------------------------------------------------
+
+- detachUserPolicy: this operation will detach a policy from a user
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:detachUserPolicy")
+ .setHeader(IAM2Constants.USERNAME, constant("camel"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachUserPolicy")
+--------------------------------------------------------------------------------
+
+- attachGroupPolicy: this operation will attach a policy to a group
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:attachGroupPolicy")
+ .setHeader(IAM2Constants.GROUP_NAME, constant("myGroup"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachGroupPolicy")
+--------------------------------------------------------------------------------
+
+- detachGroupPolicy: this operation will detach a policy from a group
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:detachGroupPolicy")
+ .setHeader(IAM2Constants.GROUP_NAME, constant("myGroup"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachGroupPolicy")
+--------------------------------------------------------------------------------
+
+- attachRolePolicy: this operation will attach a policy to a role
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:attachRolePolicy")
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachRolePolicy")
+--------------------------------------------------------------------------------
+
+- detachRolePolicy: this operation will detach a policy from a role
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:detachRolePolicy")
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+ .setHeader(IAM2Constants.POLICY_ARN,
constant("arn:aws:iam::123456789012:policy/myPolicy"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachRolePolicy")
+--------------------------------------------------------------------------------
+
+==== Instance Profile Operations
+
+- createInstanceProfile: this operation will create an instance profile in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:createInstanceProfile")
+ .setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
constant("myInstanceProfile"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createInstanceProfile")
+--------------------------------------------------------------------------------
+
+- deleteInstanceProfile: this operation will delete an instance profile in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:deleteInstanceProfile")
+ .setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
constant("myInstanceProfile"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteInstanceProfile")
+--------------------------------------------------------------------------------
+
+- getInstanceProfile: this operation will get an instance profile in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:getInstanceProfile")
+ .setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
constant("myInstanceProfile"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getInstanceProfile")
+--------------------------------------------------------------------------------
+
+- listInstanceProfiles: this operation will list the instance profiles in IAM
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:listInstanceProfiles")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listInstanceProfiles")
+--------------------------------------------------------------------------------
+
+- addRoleToInstanceProfile: this operation will add a role to an instance
profile
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:addRoleToInstanceProfile")
+ .setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
constant("myInstanceProfile"))
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=addRoleToInstanceProfile")
+--------------------------------------------------------------------------------
+
+- removeRoleFromInstanceProfile: this operation will remove a role from an
instance profile
+
+[source,java]
+--------------------------------------------------------------------------------
+from("direct:removeRoleFromInstanceProfile")
+ .setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
constant("myInstanceProfile"))
+ .setHeader(IAM2Constants.ROLE_NAME, constant("myRole"))
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=removeRoleFromInstanceProfile")
+--------------------------------------------------------------------------------
+
=== Using a POJO as body
Sometimes building an AWS Request can be complex because of multiple options.
We introduce the possibility to use a POJO as a body.
diff --git
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
index 6acc42d5ff41..298ca9026143 100644
---
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
+++
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
@@ -55,4 +55,42 @@ public interface IAM2Constants {
String GROUP_ARN = "CamelAwsIAMGroupArn";
@Metadata(description = "The ID of the created or retrieved group",
javaType = "String")
String GROUP_ID = "CamelAwsIAMGroupId";
+
+ // Role constants
+ @Metadata(description = "The name of an AWS IAM Role", javaType = "String")
+ String ROLE_NAME = "CamelAwsIAMRoleName";
+ @Metadata(description = "The path of an AWS IAM Role", javaType = "String")
+ String ROLE_PATH = "CamelAwsIAMRolePath";
+ @Metadata(description = "The assume role policy document for the role",
javaType = "String")
+ String ASSUME_ROLE_POLICY_DOCUMENT = "CamelAwsIAMAssumeRolePolicyDocument";
+ @Metadata(description = "The ARN of the created or retrieved role",
javaType = "String")
+ String ROLE_ARN = "CamelAwsIAMRoleArn";
+ @Metadata(description = "The ID of the created or retrieved role",
javaType = "String")
+ String ROLE_ID = "CamelAwsIAMRoleId";
+ @Metadata(description = "The description of an AWS IAM Role", javaType =
"String")
+ String ROLE_DESCRIPTION = "CamelAwsIAMRoleDescription";
+
+ // Policy constants
+ @Metadata(description = "The name of an AWS IAM Policy", javaType =
"String")
+ String POLICY_NAME = "CamelAwsIAMPolicyName";
+ @Metadata(description = "The path of an AWS IAM Policy", javaType =
"String")
+ String POLICY_PATH = "CamelAwsIAMPolicyPath";
+ @Metadata(description = "The policy document", javaType = "String")
+ String POLICY_DOCUMENT = "CamelAwsIAMPolicyDocument";
+ @Metadata(description = "The ARN of an AWS IAM Policy", javaType =
"String")
+ String POLICY_ARN = "CamelAwsIAMPolicyArn";
+ @Metadata(description = "The ID of an AWS IAM Policy", javaType = "String")
+ String POLICY_ID = "CamelAwsIAMPolicyId";
+ @Metadata(description = "The description of an AWS IAM Policy", javaType =
"String")
+ String POLICY_DESCRIPTION = "CamelAwsIAMPolicyDescription";
+
+ // Instance profile constants
+ @Metadata(description = "The name of an AWS IAM Instance Profile",
javaType = "String")
+ String INSTANCE_PROFILE_NAME = "CamelAwsIAMInstanceProfileName";
+ @Metadata(description = "The path of an AWS IAM Instance Profile",
javaType = "String")
+ String INSTANCE_PROFILE_PATH = "CamelAwsIAMInstanceProfilePath";
+ @Metadata(description = "The ARN of an AWS IAM Instance Profile", javaType
= "String")
+ String INSTANCE_PROFILE_ARN = "CamelAwsIAMInstanceProfileArn";
+ @Metadata(description = "The ID of an AWS IAM Instance Profile", javaType
= "String")
+ String INSTANCE_PROFILE_ID = "CamelAwsIAMInstanceProfileId";
}
diff --git
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Operations.java
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Operations.java
index 048bb0d4ec6d..122dd60ef399 100644
---
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Operations.java
+++
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Operations.java
@@ -30,5 +30,29 @@ public enum IAM2Operations {
deleteGroup,
listGroups,
addUserToGroup,
- removeUserFromGroup
+ removeUserFromGroup,
+ // Role operations
+ createRole,
+ deleteRole,
+ getRole,
+ listRoles,
+ // Policy operations
+ createPolicy,
+ deletePolicy,
+ getPolicy,
+ listPolicies,
+ // Policy attachment operations
+ attachUserPolicy,
+ detachUserPolicy,
+ attachGroupPolicy,
+ detachGroupPolicy,
+ attachRolePolicy,
+ detachRolePolicy,
+ // Instance profile operations
+ createInstanceProfile,
+ deleteInstanceProfile,
+ getInstanceProfile,
+ listInstanceProfiles,
+ addRoleToInstanceProfile,
+ removeRoleFromInstanceProfile
}
diff --git
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java
index dcebdf013988..70c83b665750 100644
---
a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java
+++
b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java
@@ -34,23 +34,52 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.services.iam.IamClient;
+import
software.amazon.awssdk.services.iam.model.AddRoleToInstanceProfileRequest;
import software.amazon.awssdk.services.iam.model.AddUserToGroupRequest;
+import software.amazon.awssdk.services.iam.model.AttachGroupPolicyRequest;
+import software.amazon.awssdk.services.iam.model.AttachRolePolicyRequest;
+import software.amazon.awssdk.services.iam.model.AttachUserPolicyRequest;
import software.amazon.awssdk.services.iam.model.CreateAccessKeyRequest;
import software.amazon.awssdk.services.iam.model.CreateGroupRequest;
import software.amazon.awssdk.services.iam.model.CreateGroupResponse;
+import software.amazon.awssdk.services.iam.model.CreateInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.CreateInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.CreatePolicyRequest;
+import software.amazon.awssdk.services.iam.model.CreatePolicyResponse;
+import software.amazon.awssdk.services.iam.model.CreateRoleRequest;
+import software.amazon.awssdk.services.iam.model.CreateRoleResponse;
import software.amazon.awssdk.services.iam.model.CreateUserRequest;
import software.amazon.awssdk.services.iam.model.CreateUserResponse;
import software.amazon.awssdk.services.iam.model.DeleteAccessKeyRequest;
import software.amazon.awssdk.services.iam.model.DeleteGroupRequest;
+import software.amazon.awssdk.services.iam.model.DeleteInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.DeletePolicyRequest;
+import software.amazon.awssdk.services.iam.model.DeleteRoleRequest;
import software.amazon.awssdk.services.iam.model.DeleteUserRequest;
+import software.amazon.awssdk.services.iam.model.DetachGroupPolicyRequest;
+import software.amazon.awssdk.services.iam.model.DetachRolePolicyRequest;
+import software.amazon.awssdk.services.iam.model.DetachUserPolicyRequest;
+import software.amazon.awssdk.services.iam.model.GetInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.GetInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.GetPolicyRequest;
+import software.amazon.awssdk.services.iam.model.GetPolicyResponse;
+import software.amazon.awssdk.services.iam.model.GetRoleRequest;
+import software.amazon.awssdk.services.iam.model.GetRoleResponse;
import software.amazon.awssdk.services.iam.model.GetUserRequest;
import software.amazon.awssdk.services.iam.model.GetUserResponse;
import software.amazon.awssdk.services.iam.model.ListAccessKeysRequest;
import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse;
import software.amazon.awssdk.services.iam.model.ListGroupsRequest;
import software.amazon.awssdk.services.iam.model.ListGroupsResponse;
+import software.amazon.awssdk.services.iam.model.ListInstanceProfilesRequest;
+import software.amazon.awssdk.services.iam.model.ListInstanceProfilesResponse;
+import software.amazon.awssdk.services.iam.model.ListPoliciesRequest;
+import software.amazon.awssdk.services.iam.model.ListPoliciesResponse;
+import software.amazon.awssdk.services.iam.model.ListRolesRequest;
+import software.amazon.awssdk.services.iam.model.ListRolesResponse;
import software.amazon.awssdk.services.iam.model.ListUsersRequest;
import software.amazon.awssdk.services.iam.model.ListUsersResponse;
+import
software.amazon.awssdk.services.iam.model.RemoveRoleFromInstanceProfileRequest;
import software.amazon.awssdk.services.iam.model.RemoveUserFromGroupRequest;
import software.amazon.awssdk.services.iam.model.StatusType;
import software.amazon.awssdk.services.iam.model.UpdateAccessKeyRequest;
@@ -63,6 +92,12 @@ public class IAM2Producer extends DefaultProducer {
private static final Logger LOG =
LoggerFactory.getLogger(IAM2Producer.class);
public static final String MISSING_GROUP_NAME = "Group Name must be
specified";
public static final String MISSING_USER_NAME = "User Name must be
specified";
+ public static final String MISSING_ROLE_NAME = "Role Name must be
specified";
+ public static final String MISSING_POLICY_ARN = "Policy ARN must be
specified";
+ public static final String MISSING_POLICY_NAME = "Policy Name must be
specified";
+ public static final String MISSING_POLICY_DOCUMENT = "Policy Document must
be specified";
+ public static final String MISSING_ASSUME_ROLE_POLICY_DOCUMENT = "Assume
Role Policy Document must be specified";
+ public static final String MISSING_INSTANCE_PROFILE_NAME = "Instance
Profile Name must be specified";
private transient String iamProducerToString;
private HealthCheck producerHealthCheck;
private WritableHealthCheckRepository healthCheckRepository;
@@ -118,6 +153,70 @@ public class IAM2Producer extends DefaultProducer {
case removeUserFromGroup:
removeUserFromGroup(getEndpoint().getIamClient(), exchange);
break;
+ // Role operations
+ case createRole:
+ createRole(getEndpoint().getIamClient(), exchange);
+ break;
+ case deleteRole:
+ deleteRole(getEndpoint().getIamClient(), exchange);
+ break;
+ case getRole:
+ getRole(getEndpoint().getIamClient(), exchange);
+ break;
+ case listRoles:
+ listRoles(getEndpoint().getIamClient(), exchange);
+ break;
+ // Policy operations
+ case createPolicy:
+ createPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case deletePolicy:
+ deletePolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case getPolicy:
+ getPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case listPolicies:
+ listPolicies(getEndpoint().getIamClient(), exchange);
+ break;
+ // Policy attachment operations
+ case attachUserPolicy:
+ attachUserPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case detachUserPolicy:
+ detachUserPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case attachGroupPolicy:
+ attachGroupPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case detachGroupPolicy:
+ detachGroupPolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case attachRolePolicy:
+ attachRolePolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ case detachRolePolicy:
+ detachRolePolicy(getEndpoint().getIamClient(), exchange);
+ break;
+ // Instance profile operations
+ case createInstanceProfile:
+ createInstanceProfile(getEndpoint().getIamClient(), exchange);
+ break;
+ case deleteInstanceProfile:
+ deleteInstanceProfile(getEndpoint().getIamClient(), exchange);
+ break;
+ case getInstanceProfile:
+ getInstanceProfile(getEndpoint().getIamClient(), exchange);
+ break;
+ case listInstanceProfiles:
+ listInstanceProfiles(getEndpoint().getIamClient(), exchange);
+ break;
+ case addRoleToInstanceProfile:
+ addRoleToInstanceProfile(getEndpoint().getIamClient(),
exchange);
+ break;
+ case removeRoleFromInstanceProfile:
+ removeRoleFromInstanceProfile(getEndpoint().getIamClient(),
exchange);
+ break;
default:
throw new IllegalArgumentException("Unsupported operation: " +
operation);
}
@@ -401,6 +500,423 @@ public class IAM2Producer extends DefaultProducer {
"Remove User From Group");
}
+ // Role operations
+
+ private void createRole(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ CreateRoleRequest.class,
+ iamClient::createRole,
+ () -> {
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ String assumeRolePolicyDocument =
getRequiredHeader(exchange,
+ IAM2Constants.ASSUME_ROLE_POLICY_DOCUMENT,
String.class, MISSING_ASSUME_ROLE_POLICY_DOCUMENT);
+ CreateRoleRequest.Builder builder =
CreateRoleRequest.builder()
+ .roleName(roleName)
+
.assumeRolePolicyDocument(assumeRolePolicyDocument);
+ String rolePath = getOptionalHeader(exchange,
IAM2Constants.ROLE_PATH, String.class);
+ if (rolePath != null) {
+ builder.path(rolePath);
+ }
+ String description = getOptionalHeader(exchange,
IAM2Constants.ROLE_DESCRIPTION, String.class);
+ if (description != null) {
+ builder.description(description);
+ }
+ return iamClient.createRole(builder.build());
+ },
+ "Create Role",
+ (CreateRoleResponse response, Message message) -> {
+ if (response.role() != null) {
+ message.setHeader(IAM2Constants.ROLE_ARN,
response.role().arn());
+ message.setHeader(IAM2Constants.ROLE_ID,
response.role().roleId());
+ }
+ });
+ }
+
+ private void deleteRole(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DeleteRoleRequest.class,
+ iamClient::deleteRole,
+ () -> {
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ return
iamClient.deleteRole(DeleteRoleRequest.builder().roleName(roleName).build());
+ },
+ "Delete Role");
+ }
+
+ private void getRole(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ GetRoleRequest.class,
+ iamClient::getRole,
+ () -> {
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ return
iamClient.getRole(GetRoleRequest.builder().roleName(roleName).build());
+ },
+ "Get Role",
+ (GetRoleResponse response, Message message) -> {
+ if (response.role() != null) {
+ message.setHeader(IAM2Constants.ROLE_ARN,
response.role().arn());
+ message.setHeader(IAM2Constants.ROLE_ID,
response.role().roleId());
+ }
+ });
+ }
+
+ private void listRoles(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ ListRolesRequest.class,
+ iamClient::listRoles,
+ () -> {
+ ListRolesRequest.Builder builder =
ListRolesRequest.builder();
+ String marker = getOptionalHeader(exchange,
IAM2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange,
IAM2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
+ return iamClient.listRoles(builder.build());
+ },
+ "List Roles",
+ (ListRolesResponse response, Message message) -> {
+ message.setHeader(IAM2Constants.IS_TRUNCATED,
response.isTruncated());
+ if (response.marker() != null) {
+ message.setHeader(IAM2Constants.NEXT_MARKER,
response.marker());
+ }
+ });
+ }
+
+ // Policy operations
+
+ private void createPolicy(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ CreatePolicyRequest.class,
+ iamClient::createPolicy,
+ () -> {
+ String policyName
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_NAME, String.class, MISSING_POLICY_NAME);
+ String policyDocument
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_DOCUMENT, String.class, MISSING_POLICY_DOCUMENT);
+ CreatePolicyRequest.Builder builder =
CreatePolicyRequest.builder()
+ .policyName(policyName)
+ .policyDocument(policyDocument);
+ String policyPath = getOptionalHeader(exchange,
IAM2Constants.POLICY_PATH, String.class);
+ if (policyPath != null) {
+ builder.path(policyPath);
+ }
+ String description = getOptionalHeader(exchange,
IAM2Constants.POLICY_DESCRIPTION, String.class);
+ if (description != null) {
+ builder.description(description);
+ }
+ return iamClient.createPolicy(builder.build());
+ },
+ "Create Policy",
+ (CreatePolicyResponse response, Message message) -> {
+ if (response.policy() != null) {
+ message.setHeader(IAM2Constants.POLICY_ARN,
response.policy().arn());
+ message.setHeader(IAM2Constants.POLICY_ID,
response.policy().policyId());
+ }
+ });
+ }
+
+ private void deletePolicy(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DeletePolicyRequest.class,
+ iamClient::deletePolicy,
+ () -> {
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.deletePolicy(DeletePolicyRequest.builder().policyArn(policyArn).build());
+ },
+ "Delete Policy");
+ }
+
+ private void getPolicy(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ GetPolicyRequest.class,
+ iamClient::getPolicy,
+ () -> {
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.getPolicy(GetPolicyRequest.builder().policyArn(policyArn).build());
+ },
+ "Get Policy",
+ (GetPolicyResponse response, Message message) -> {
+ if (response.policy() != null) {
+ message.setHeader(IAM2Constants.POLICY_ARN,
response.policy().arn());
+ message.setHeader(IAM2Constants.POLICY_ID,
response.policy().policyId());
+ }
+ });
+ }
+
+ private void listPolicies(IamClient iamClient, Exchange exchange) throws
InvalidPayloadException {
+ executeOperation(
+ exchange,
+ ListPoliciesRequest.class,
+ iamClient::listPolicies,
+ () -> {
+ ListPoliciesRequest.Builder builder =
ListPoliciesRequest.builder();
+ String marker = getOptionalHeader(exchange,
IAM2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange,
IAM2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
+ return iamClient.listPolicies(builder.build());
+ },
+ "List Policies",
+ (ListPoliciesResponse response, Message message) -> {
+ message.setHeader(IAM2Constants.IS_TRUNCATED,
response.isTruncated());
+ if (response.marker() != null) {
+ message.setHeader(IAM2Constants.NEXT_MARKER,
response.marker());
+ }
+ });
+ }
+
+ // Policy attachment operations
+
+ private void attachUserPolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ AttachUserPolicyRequest.class,
+ iamClient::attachUserPolicy,
+ () -> {
+ String userName
+ = getRequiredHeader(exchange,
IAM2Constants.USERNAME, String.class, MISSING_USER_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.attachUserPolicy(AttachUserPolicyRequest.builder()
+ .userName(userName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Attach User Policy");
+ }
+
+ private void detachUserPolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DetachUserPolicyRequest.class,
+ iamClient::detachUserPolicy,
+ () -> {
+ String userName
+ = getRequiredHeader(exchange,
IAM2Constants.USERNAME, String.class, MISSING_USER_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.detachUserPolicy(DetachUserPolicyRequest.builder()
+ .userName(userName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Detach User Policy");
+ }
+
+ private void attachGroupPolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ AttachGroupPolicyRequest.class,
+ iamClient::attachGroupPolicy,
+ () -> {
+ String groupName
+ = getRequiredHeader(exchange,
IAM2Constants.GROUP_NAME, String.class, MISSING_GROUP_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.attachGroupPolicy(AttachGroupPolicyRequest.builder()
+ .groupName(groupName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Attach Group Policy");
+ }
+
+ private void detachGroupPolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DetachGroupPolicyRequest.class,
+ iamClient::detachGroupPolicy,
+ () -> {
+ String groupName
+ = getRequiredHeader(exchange,
IAM2Constants.GROUP_NAME, String.class, MISSING_GROUP_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.detachGroupPolicy(DetachGroupPolicyRequest.builder()
+ .groupName(groupName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Detach Group Policy");
+ }
+
+ private void attachRolePolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ AttachRolePolicyRequest.class,
+ iamClient::attachRolePolicy,
+ () -> {
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.attachRolePolicy(AttachRolePolicyRequest.builder()
+ .roleName(roleName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Attach Role Policy");
+ }
+
+ private void detachRolePolicy(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DetachRolePolicyRequest.class,
+ iamClient::detachRolePolicy,
+ () -> {
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ String policyArn
+ = getRequiredHeader(exchange,
IAM2Constants.POLICY_ARN, String.class, MISSING_POLICY_ARN);
+ return
iamClient.detachRolePolicy(DetachRolePolicyRequest.builder()
+ .roleName(roleName)
+ .policyArn(policyArn)
+ .build());
+ },
+ "Detach Role Policy");
+ }
+
+ // Instance profile operations
+
+ private void createInstanceProfile(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ CreateInstanceProfileRequest.class,
+ iamClient::createInstanceProfile,
+ () -> {
+ String instanceProfileName = getRequiredHeader(exchange,
+ IAM2Constants.INSTANCE_PROFILE_NAME, String.class,
MISSING_INSTANCE_PROFILE_NAME);
+ CreateInstanceProfileRequest.Builder builder
+ =
CreateInstanceProfileRequest.builder().instanceProfileName(instanceProfileName);
+ String path = getOptionalHeader(exchange,
IAM2Constants.INSTANCE_PROFILE_PATH, String.class);
+ if (path != null) {
+ builder.path(path);
+ }
+ return iamClient.createInstanceProfile(builder.build());
+ },
+ "Create Instance Profile",
+ (CreateInstanceProfileResponse response, Message message) -> {
+ if (response.instanceProfile() != null) {
+ message.setHeader(IAM2Constants.INSTANCE_PROFILE_ARN,
response.instanceProfile().arn());
+ message.setHeader(IAM2Constants.INSTANCE_PROFILE_ID,
response.instanceProfile().instanceProfileId());
+ }
+ });
+ }
+
+ private void deleteInstanceProfile(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ DeleteInstanceProfileRequest.class,
+ iamClient::deleteInstanceProfile,
+ () -> {
+ String instanceProfileName = getRequiredHeader(exchange,
+ IAM2Constants.INSTANCE_PROFILE_NAME, String.class,
MISSING_INSTANCE_PROFILE_NAME);
+ return iamClient.deleteInstanceProfile(
+
DeleteInstanceProfileRequest.builder().instanceProfileName(instanceProfileName).build());
+ },
+ "Delete Instance Profile");
+ }
+
+ private void getInstanceProfile(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ GetInstanceProfileRequest.class,
+ iamClient::getInstanceProfile,
+ () -> {
+ String instanceProfileName = getRequiredHeader(exchange,
+ IAM2Constants.INSTANCE_PROFILE_NAME, String.class,
MISSING_INSTANCE_PROFILE_NAME);
+ return iamClient.getInstanceProfile(
+
GetInstanceProfileRequest.builder().instanceProfileName(instanceProfileName).build());
+ },
+ "Get Instance Profile",
+ (GetInstanceProfileResponse response, Message message) -> {
+ if (response.instanceProfile() != null) {
+ message.setHeader(IAM2Constants.INSTANCE_PROFILE_ARN,
response.instanceProfile().arn());
+ message.setHeader(IAM2Constants.INSTANCE_PROFILE_ID,
response.instanceProfile().instanceProfileId());
+ }
+ });
+ }
+
+ private void listInstanceProfiles(IamClient iamClient, Exchange exchange)
throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ ListInstanceProfilesRequest.class,
+ iamClient::listInstanceProfiles,
+ () -> {
+ ListInstanceProfilesRequest.Builder builder =
ListInstanceProfilesRequest.builder();
+ String marker = getOptionalHeader(exchange,
IAM2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange,
IAM2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
+ return iamClient.listInstanceProfiles(builder.build());
+ },
+ "List Instance Profiles",
+ (ListInstanceProfilesResponse response, Message message) -> {
+ message.setHeader(IAM2Constants.IS_TRUNCATED,
response.isTruncated());
+ if (response.marker() != null) {
+ message.setHeader(IAM2Constants.NEXT_MARKER,
response.marker());
+ }
+ });
+ }
+
+ private void addRoleToInstanceProfile(IamClient iamClient, Exchange
exchange) throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ AddRoleToInstanceProfileRequest.class,
+ iamClient::addRoleToInstanceProfile,
+ () -> {
+ String instanceProfileName = getRequiredHeader(exchange,
+ IAM2Constants.INSTANCE_PROFILE_NAME, String.class,
MISSING_INSTANCE_PROFILE_NAME);
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ return
iamClient.addRoleToInstanceProfile(AddRoleToInstanceProfileRequest.builder()
+ .instanceProfileName(instanceProfileName)
+ .roleName(roleName)
+ .build());
+ },
+ "Add Role To Instance Profile");
+ }
+
+ private void removeRoleFromInstanceProfile(IamClient iamClient, Exchange
exchange) throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ RemoveRoleFromInstanceProfileRequest.class,
+ iamClient::removeRoleFromInstanceProfile,
+ () -> {
+ String instanceProfileName = getRequiredHeader(exchange,
+ IAM2Constants.INSTANCE_PROFILE_NAME, String.class,
MISSING_INSTANCE_PROFILE_NAME);
+ String roleName
+ = getRequiredHeader(exchange,
IAM2Constants.ROLE_NAME, String.class, MISSING_ROLE_NAME);
+ return
iamClient.removeRoleFromInstanceProfile(RemoveRoleFromInstanceProfileRequest.builder()
+ .instanceProfileName(instanceProfileName)
+ .roleName(roleName)
+ .build());
+ },
+ "Remove Role From Instance Profile");
+ }
+
public static Message getMessageForResponse(final Exchange exchange) {
return exchange.getMessage();
}
diff --git
a/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/AmazonIAMClientMock.java
b/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/AmazonIAMClientMock.java
index 9e08029537c2..94e735324829 100644
---
a/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/AmazonIAMClientMock.java
+++
b/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/AmazonIAMClientMock.java
@@ -26,29 +26,72 @@ import software.amazon.awssdk.services.iam.IamClient;
import software.amazon.awssdk.services.iam.IamServiceClientConfiguration;
import software.amazon.awssdk.services.iam.model.AccessKey;
import software.amazon.awssdk.services.iam.model.AccessKeyMetadata;
+import
software.amazon.awssdk.services.iam.model.AddRoleToInstanceProfileRequest;
+import
software.amazon.awssdk.services.iam.model.AddRoleToInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.AttachGroupPolicyRequest;
+import software.amazon.awssdk.services.iam.model.AttachGroupPolicyResponse;
+import software.amazon.awssdk.services.iam.model.AttachRolePolicyRequest;
+import software.amazon.awssdk.services.iam.model.AttachRolePolicyResponse;
+import software.amazon.awssdk.services.iam.model.AttachUserPolicyRequest;
+import software.amazon.awssdk.services.iam.model.AttachUserPolicyResponse;
import software.amazon.awssdk.services.iam.model.CreateAccessKeyRequest;
import software.amazon.awssdk.services.iam.model.CreateAccessKeyResponse;
import software.amazon.awssdk.services.iam.model.CreateGroupRequest;
import software.amazon.awssdk.services.iam.model.CreateGroupResponse;
+import software.amazon.awssdk.services.iam.model.CreateInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.CreateInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.CreatePolicyRequest;
+import software.amazon.awssdk.services.iam.model.CreatePolicyResponse;
+import software.amazon.awssdk.services.iam.model.CreateRoleRequest;
+import software.amazon.awssdk.services.iam.model.CreateRoleResponse;
import software.amazon.awssdk.services.iam.model.CreateUserRequest;
import software.amazon.awssdk.services.iam.model.CreateUserResponse;
import software.amazon.awssdk.services.iam.model.DeleteAccessKeyRequest;
import software.amazon.awssdk.services.iam.model.DeleteAccessKeyResponse;
import software.amazon.awssdk.services.iam.model.DeleteGroupRequest;
import software.amazon.awssdk.services.iam.model.DeleteGroupResponse;
+import software.amazon.awssdk.services.iam.model.DeleteInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.DeleteInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.DeletePolicyRequest;
+import software.amazon.awssdk.services.iam.model.DeletePolicyResponse;
+import software.amazon.awssdk.services.iam.model.DeleteRoleRequest;
+import software.amazon.awssdk.services.iam.model.DeleteRoleResponse;
import software.amazon.awssdk.services.iam.model.DeleteUserRequest;
import software.amazon.awssdk.services.iam.model.DeleteUserResponse;
+import software.amazon.awssdk.services.iam.model.DetachGroupPolicyRequest;
+import software.amazon.awssdk.services.iam.model.DetachGroupPolicyResponse;
+import software.amazon.awssdk.services.iam.model.DetachRolePolicyRequest;
+import software.amazon.awssdk.services.iam.model.DetachRolePolicyResponse;
+import software.amazon.awssdk.services.iam.model.DetachUserPolicyRequest;
+import software.amazon.awssdk.services.iam.model.DetachUserPolicyResponse;
+import software.amazon.awssdk.services.iam.model.GetInstanceProfileRequest;
+import software.amazon.awssdk.services.iam.model.GetInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.GetPolicyRequest;
+import software.amazon.awssdk.services.iam.model.GetPolicyResponse;
+import software.amazon.awssdk.services.iam.model.GetRoleRequest;
+import software.amazon.awssdk.services.iam.model.GetRoleResponse;
import software.amazon.awssdk.services.iam.model.GetUserRequest;
import software.amazon.awssdk.services.iam.model.GetUserResponse;
import software.amazon.awssdk.services.iam.model.Group;
+import software.amazon.awssdk.services.iam.model.InstanceProfile;
import software.amazon.awssdk.services.iam.model.ListAccessKeysRequest;
import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse;
import software.amazon.awssdk.services.iam.model.ListGroupsRequest;
import software.amazon.awssdk.services.iam.model.ListGroupsResponse;
+import software.amazon.awssdk.services.iam.model.ListInstanceProfilesRequest;
+import software.amazon.awssdk.services.iam.model.ListInstanceProfilesResponse;
+import software.amazon.awssdk.services.iam.model.ListPoliciesRequest;
+import software.amazon.awssdk.services.iam.model.ListPoliciesResponse;
+import software.amazon.awssdk.services.iam.model.ListRolesRequest;
+import software.amazon.awssdk.services.iam.model.ListRolesResponse;
import software.amazon.awssdk.services.iam.model.ListUsersRequest;
import software.amazon.awssdk.services.iam.model.ListUsersResponse;
+import software.amazon.awssdk.services.iam.model.Policy;
+import
software.amazon.awssdk.services.iam.model.RemoveRoleFromInstanceProfileRequest;
+import
software.amazon.awssdk.services.iam.model.RemoveRoleFromInstanceProfileResponse;
import software.amazon.awssdk.services.iam.model.RemoveUserFromGroupRequest;
import software.amazon.awssdk.services.iam.model.RemoveUserFromGroupResponse;
+import software.amazon.awssdk.services.iam.model.Role;
import software.amazon.awssdk.services.iam.model.StatusType;
import software.amazon.awssdk.services.iam.model.UpdateAccessKeyRequest;
import software.amazon.awssdk.services.iam.model.UpdateAccessKeyResponse;
@@ -175,6 +218,185 @@ public class AmazonIAMClientMock implements IamClient {
return result;
}
+ // Role operations
+
+ @Override
+ public CreateRoleResponse createRole(CreateRoleRequest createRoleRequest) {
+ CreateRoleResponse.Builder result = CreateRoleResponse.builder();
+ Role.Builder role = Role.builder();
+ role.roleName(createRoleRequest.roleName());
+ role.roleId("TestRoleId");
+ role.arn("arn:aws:iam::123456789012:role/" +
createRoleRequest.roleName());
+ if (createRoleRequest.path() != null) {
+ role.path(createRoleRequest.path());
+ }
+ result.role(role.build());
+ return result.build();
+ }
+
+ @Override
+ public DeleteRoleResponse deleteRole(DeleteRoleRequest deleteRoleRequest) {
+ return DeleteRoleResponse.builder().build();
+ }
+
+ @Override
+ public GetRoleResponse getRole(GetRoleRequest getRoleRequest) {
+ GetRoleResponse.Builder result = GetRoleResponse.builder();
+ Role.Builder role = Role.builder();
+ role.roleName(getRoleRequest.roleName());
+ role.roleId("TestRoleId");
+ role.arn("arn:aws:iam::123456789012:role/" +
getRoleRequest.roleName());
+ result.role(role.build());
+ return result.build();
+ }
+
+ @Override
+ public ListRolesResponse listRoles(ListRolesRequest listRolesRequest) {
+ Role.Builder role = Role.builder();
+ role.roleId("TestRoleId");
+ role.roleName("TestRole");
+ role.arn("arn:aws:iam::123456789012:role/TestRole");
+ ListRolesResponse.Builder res = ListRolesResponse.builder();
+ res.roles(Collections.singleton(role.build()));
+ res.isTruncated(false);
+ return res.build();
+ }
+
+ // Policy operations
+
+ @Override
+ public CreatePolicyResponse createPolicy(CreatePolicyRequest
createPolicyRequest) {
+ CreatePolicyResponse.Builder result = CreatePolicyResponse.builder();
+ Policy.Builder policy = Policy.builder();
+ policy.policyName(createPolicyRequest.policyName());
+ policy.policyId("TestPolicyId");
+ policy.arn("arn:aws:iam::123456789012:policy/" +
createPolicyRequest.policyName());
+ if (createPolicyRequest.path() != null) {
+ policy.path(createPolicyRequest.path());
+ }
+ result.policy(policy.build());
+ return result.build();
+ }
+
+ @Override
+ public DeletePolicyResponse deletePolicy(DeletePolicyRequest
deletePolicyRequest) {
+ return DeletePolicyResponse.builder().build();
+ }
+
+ @Override
+ public GetPolicyResponse getPolicy(GetPolicyRequest getPolicyRequest) {
+ GetPolicyResponse.Builder result = GetPolicyResponse.builder();
+ Policy.Builder policy = Policy.builder();
+ policy.policyName("TestPolicy");
+ policy.policyId("TestPolicyId");
+ policy.arn(getPolicyRequest.policyArn());
+ result.policy(policy.build());
+ return result.build();
+ }
+
+ @Override
+ public ListPoliciesResponse listPolicies(ListPoliciesRequest
listPoliciesRequest) {
+ Policy.Builder policy = Policy.builder();
+ policy.policyId("TestPolicyId");
+ policy.policyName("TestPolicy");
+ policy.arn("arn:aws:iam::123456789012:policy/TestPolicy");
+ ListPoliciesResponse.Builder res = ListPoliciesResponse.builder();
+ res.policies(Collections.singleton(policy.build()));
+ res.isTruncated(false);
+ return res.build();
+ }
+
+ // Policy attachment operations
+
+ @Override
+ public AttachUserPolicyResponse attachUserPolicy(AttachUserPolicyRequest
attachUserPolicyRequest) {
+ return AttachUserPolicyResponse.builder().build();
+ }
+
+ @Override
+ public DetachUserPolicyResponse detachUserPolicy(DetachUserPolicyRequest
detachUserPolicyRequest) {
+ return DetachUserPolicyResponse.builder().build();
+ }
+
+ @Override
+ public AttachGroupPolicyResponse
attachGroupPolicy(AttachGroupPolicyRequest attachGroupPolicyRequest) {
+ return AttachGroupPolicyResponse.builder().build();
+ }
+
+ @Override
+ public DetachGroupPolicyResponse
detachGroupPolicy(DetachGroupPolicyRequest detachGroupPolicyRequest) {
+ return DetachGroupPolicyResponse.builder().build();
+ }
+
+ @Override
+ public AttachRolePolicyResponse attachRolePolicy(AttachRolePolicyRequest
attachRolePolicyRequest) {
+ return AttachRolePolicyResponse.builder().build();
+ }
+
+ @Override
+ public DetachRolePolicyResponse detachRolePolicy(DetachRolePolicyRequest
detachRolePolicyRequest) {
+ return DetachRolePolicyResponse.builder().build();
+ }
+
+ // Instance profile operations
+
+ @Override
+ public CreateInstanceProfileResponse
createInstanceProfile(CreateInstanceProfileRequest
createInstanceProfileRequest) {
+ CreateInstanceProfileResponse.Builder result =
CreateInstanceProfileResponse.builder();
+ InstanceProfile.Builder instanceProfile = InstanceProfile.builder();
+
instanceProfile.instanceProfileName(createInstanceProfileRequest.instanceProfileName());
+ instanceProfile.instanceProfileId("TestInstanceProfileId");
+ instanceProfile.arn("arn:aws:iam::123456789012:instance-profile/" +
createInstanceProfileRequest.instanceProfileName());
+ if (createInstanceProfileRequest.path() != null) {
+ instanceProfile.path(createInstanceProfileRequest.path());
+ }
+ instanceProfile.createDate(Instant.now());
+ result.instanceProfile(instanceProfile.build());
+ return result.build();
+ }
+
+ @Override
+ public DeleteInstanceProfileResponse
deleteInstanceProfile(DeleteInstanceProfileRequest
deleteInstanceProfileRequest) {
+ return DeleteInstanceProfileResponse.builder().build();
+ }
+
+ @Override
+ public GetInstanceProfileResponse
getInstanceProfile(GetInstanceProfileRequest getInstanceProfileRequest) {
+ GetInstanceProfileResponse.Builder result =
GetInstanceProfileResponse.builder();
+ InstanceProfile.Builder instanceProfile = InstanceProfile.builder();
+
instanceProfile.instanceProfileName(getInstanceProfileRequest.instanceProfileName());
+ instanceProfile.instanceProfileId("TestInstanceProfileId");
+ instanceProfile.arn("arn:aws:iam::123456789012:instance-profile/" +
getInstanceProfileRequest.instanceProfileName());
+ instanceProfile.createDate(Instant.now());
+ result.instanceProfile(instanceProfile.build());
+ return result.build();
+ }
+
+ @Override
+ public ListInstanceProfilesResponse
listInstanceProfiles(ListInstanceProfilesRequest listInstanceProfilesRequest) {
+ InstanceProfile.Builder instanceProfile = InstanceProfile.builder();
+ instanceProfile.instanceProfileId("TestInstanceProfileId");
+ instanceProfile.instanceProfileName("TestInstanceProfile");
+
instanceProfile.arn("arn:aws:iam::123456789012:instance-profile/TestInstanceProfile");
+ instanceProfile.createDate(Instant.now());
+ ListInstanceProfilesResponse.Builder res =
ListInstanceProfilesResponse.builder();
+ res.instanceProfiles(Collections.singleton(instanceProfile.build()));
+ res.isTruncated(false);
+ return res.build();
+ }
+
+ @Override
+ public AddRoleToInstanceProfileResponse addRoleToInstanceProfile(
+ AddRoleToInstanceProfileRequest addRoleToInstanceProfileRequest) {
+ return AddRoleToInstanceProfileResponse.builder().build();
+ }
+
+ @Override
+ public RemoveRoleFromInstanceProfileResponse removeRoleFromInstanceProfile(
+ RemoveRoleFromInstanceProfileRequest
removeRoleFromInstanceProfileRequest) {
+ return RemoveRoleFromInstanceProfileResponse.builder().build();
+ }
+
@Override
public IamServiceClientConfiguration serviceClientConfiguration() {
return null;
diff --git
a/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java
b/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java
index 9cb0c6028003..8d059d0b981f 100644
---
a/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java
+++
b/components/camel-aws/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java
@@ -24,18 +24,38 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Test;
+import
software.amazon.awssdk.services.iam.model.AddRoleToInstanceProfileResponse;
import software.amazon.awssdk.services.iam.model.AddUserToGroupResponse;
+import software.amazon.awssdk.services.iam.model.AttachGroupPolicyResponse;
+import software.amazon.awssdk.services.iam.model.AttachRolePolicyResponse;
+import software.amazon.awssdk.services.iam.model.AttachUserPolicyResponse;
import software.amazon.awssdk.services.iam.model.CreateAccessKeyResponse;
import software.amazon.awssdk.services.iam.model.CreateGroupResponse;
+import software.amazon.awssdk.services.iam.model.CreateInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.CreatePolicyResponse;
+import software.amazon.awssdk.services.iam.model.CreateRoleResponse;
import software.amazon.awssdk.services.iam.model.CreateUserRequest;
import software.amazon.awssdk.services.iam.model.CreateUserResponse;
import software.amazon.awssdk.services.iam.model.DeleteAccessKeyResponse;
import software.amazon.awssdk.services.iam.model.DeleteGroupResponse;
+import software.amazon.awssdk.services.iam.model.DeleteInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.DeletePolicyResponse;
+import software.amazon.awssdk.services.iam.model.DeleteRoleResponse;
import software.amazon.awssdk.services.iam.model.DeleteUserResponse;
+import software.amazon.awssdk.services.iam.model.DetachGroupPolicyResponse;
+import software.amazon.awssdk.services.iam.model.DetachRolePolicyResponse;
+import software.amazon.awssdk.services.iam.model.DetachUserPolicyResponse;
+import software.amazon.awssdk.services.iam.model.GetInstanceProfileResponse;
+import software.amazon.awssdk.services.iam.model.GetPolicyResponse;
+import software.amazon.awssdk.services.iam.model.GetRoleResponse;
import software.amazon.awssdk.services.iam.model.GetUserResponse;
import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse;
import software.amazon.awssdk.services.iam.model.ListGroupsResponse;
+import software.amazon.awssdk.services.iam.model.ListInstanceProfilesResponse;
+import software.amazon.awssdk.services.iam.model.ListPoliciesResponse;
+import software.amazon.awssdk.services.iam.model.ListRolesResponse;
import software.amazon.awssdk.services.iam.model.ListUsersResponse;
+import
software.amazon.awssdk.services.iam.model.RemoveRoleFromInstanceProfileResponse;
import software.amazon.awssdk.services.iam.model.RemoveUserFromGroupResponse;
import software.amazon.awssdk.services.iam.model.StatusType;
import software.amazon.awssdk.services.iam.model.UpdateAccessKeyResponse;
@@ -308,6 +328,335 @@ public class IAMProducerTest extends CamelTestSupport {
assertNotNull(resultGet);
}
+ // Role operations tests
+
+ @Test
+ public void iamCreateRoleTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:createRole", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.createRole);
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+
exchange.getIn().setHeader(IAM2Constants.ASSUME_ROLE_POLICY_DOCUMENT,
+ "{\"Version\":\"2012-10-17\",\"Statement\":[]}");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ CreateRoleResponse resultGet = (CreateRoleResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestRole", resultGet.role().roleName());
+ }
+
+ @Test
+ public void iamDeleteRoleTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:deleteRole", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.deleteRole);
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DeleteRoleResponse resultGet = (DeleteRoleResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamGetRoleTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:getRole", new Processor()
{
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.getRole);
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ GetRoleResponse resultGet = (GetRoleResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestRole", resultGet.role().roleName());
+ }
+
+ @Test
+ public void iamListRolesTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:listRoles", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.listRoles);
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ ListRolesResponse resultGet = (ListRolesResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals(1, resultGet.roles().size());
+ assertEquals("TestRole", resultGet.roles().get(0).roleName());
+ }
+
+ // Policy operations tests
+
+ @Test
+ public void iamCreatePolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:createPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.createPolicy);
+ exchange.getIn().setHeader(IAM2Constants.POLICY_NAME,
"TestPolicy");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_DOCUMENT,
+ "{\"Version\":\"2012-10-17\",\"Statement\":[]}");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ CreatePolicyResponse resultGet = (CreatePolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestPolicy", resultGet.policy().policyName());
+ }
+
+ @Test
+ public void iamDeletePolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:deletePolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.deletePolicy);
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DeletePolicyResponse resultGet = (DeletePolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamGetPolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:getPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.getPolicy);
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ GetPolicyResponse resultGet = (GetPolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestPolicy", resultGet.policy().policyName());
+ }
+
+ @Test
+ public void iamListPoliciesTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:listPolicies", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.listPolicies);
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ ListPoliciesResponse resultGet = (ListPoliciesResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals(1, resultGet.policies().size());
+ assertEquals("TestPolicy", resultGet.policies().get(0).policyName());
+ }
+
+ // Policy attachment operations tests
+
+ @Test
+ public void iamAttachUserPolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:attachUserPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.attachUserPolicy);
+ exchange.getIn().setHeader(IAM2Constants.USERNAME, "test");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ AttachUserPolicyResponse resultGet = (AttachUserPolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamDetachUserPolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:detachUserPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.detachUserPolicy);
+ exchange.getIn().setHeader(IAM2Constants.USERNAME, "test");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DetachUserPolicyResponse resultGet = (DetachUserPolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamAttachGroupPolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:attachGroupPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.attachGroupPolicy);
+ exchange.getIn().setHeader(IAM2Constants.GROUP_NAME, "Test");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ AttachGroupPolicyResponse resultGet = (AttachGroupPolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamDetachGroupPolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:detachGroupPolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.detachGroupPolicy);
+ exchange.getIn().setHeader(IAM2Constants.GROUP_NAME, "Test");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DetachGroupPolicyResponse resultGet = (DetachGroupPolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamAttachRolePolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:attachRolePolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.attachRolePolicy);
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ AttachRolePolicyResponse resultGet = (AttachRolePolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamDetachRolePolicyTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:detachRolePolicy", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.detachRolePolicy);
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ exchange.getIn().setHeader(IAM2Constants.POLICY_ARN,
"arn:aws:iam::123456789012:policy/TestPolicy");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DetachRolePolicyResponse resultGet = (DetachRolePolicyResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ // Instance profile operations tests
+
+ @Test
+ public void iamCreateInstanceProfileTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:createInstanceProfile",
new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.createInstanceProfile);
+
exchange.getIn().setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
"TestInstanceProfile");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ CreateInstanceProfileResponse resultGet =
(CreateInstanceProfileResponse) exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestInstanceProfile",
resultGet.instanceProfile().instanceProfileName());
+ }
+
+ @Test
+ public void iamDeleteInstanceProfileTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:deleteInstanceProfile",
new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.deleteInstanceProfile);
+
exchange.getIn().setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
"TestInstanceProfile");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ DeleteInstanceProfileResponse resultGet =
(DeleteInstanceProfileResponse) exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamGetInstanceProfileTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:getInstanceProfile", new
Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.getInstanceProfile);
+
exchange.getIn().setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
"TestInstanceProfile");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ GetInstanceProfileResponse resultGet = (GetInstanceProfileResponse)
exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals("TestInstanceProfile",
resultGet.instanceProfile().instanceProfileName());
+ }
+
+ @Test
+ public void iamListInstanceProfilesTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange = template.request("direct:listInstanceProfiles",
new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.listInstanceProfiles);
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ ListInstanceProfilesResponse resultGet =
(ListInstanceProfilesResponse) exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ assertEquals(1, resultGet.instanceProfiles().size());
+ assertEquals("TestInstanceProfile",
resultGet.instanceProfiles().get(0).instanceProfileName());
+ }
+
+ @Test
+ public void iamAddRoleToInstanceProfileTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange =
template.request("direct:addRoleToInstanceProfile", new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.addRoleToInstanceProfile);
+
exchange.getIn().setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
"TestInstanceProfile");
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ AddRoleToInstanceProfileResponse resultGet =
(AddRoleToInstanceProfileResponse) exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
+ @Test
+ public void iamRemoveRoleFromInstanceProfileTest() throws Exception {
+ mock.expectedMessageCount(1);
+ Exchange exchange =
template.request("direct:removeRoleFromInstanceProfile", new Processor() {
+ @Override
+ public void process(Exchange exchange) {
+ exchange.getIn().setHeader(IAM2Constants.OPERATION,
IAM2Operations.removeRoleFromInstanceProfile);
+
exchange.getIn().setHeader(IAM2Constants.INSTANCE_PROFILE_NAME,
"TestInstanceProfile");
+ exchange.getIn().setHeader(IAM2Constants.ROLE_NAME,
"TestRole");
+ }
+ });
+ MockEndpoint.assertIsSatisfied(context);
+ RemoveRoleFromInstanceProfileResponse resultGet =
(RemoveRoleFromInstanceProfileResponse) exchange.getIn().getBody();
+ assertNotNull(resultGet);
+ }
+
@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@@ -340,6 +689,51 @@ public class IAMProducerTest extends CamelTestSupport {
.to("mock:result");
from("direct:removeUserFromGroup")
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=removeUserFromGroup").to("mock:result");
+ // Role operations
+
from("direct:createRole").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createRole")
+ .to("mock:result");
+
from("direct:deleteRole").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteRole")
+ .to("mock:result");
+
from("direct:getRole").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getRole")
+ .to("mock:result");
+
from("direct:listRoles").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listRoles")
+ .to("mock:result");
+ // Policy operations
+
from("direct:createPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createPolicy")
+ .to("mock:result");
+
from("direct:deletePolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deletePolicy")
+ .to("mock:result");
+
from("direct:getPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getPolicy")
+ .to("mock:result");
+
from("direct:listPolicies").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listPolicies")
+ .to("mock:result");
+ // Policy attachment operations
+
from("direct:attachUserPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachUserPolicy")
+ .to("mock:result");
+
from("direct:detachUserPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachUserPolicy")
+ .to("mock:result");
+
from("direct:attachGroupPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachGroupPolicy")
+ .to("mock:result");
+
from("direct:detachGroupPolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachGroupPolicy")
+ .to("mock:result");
+
from("direct:attachRolePolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=attachRolePolicy")
+ .to("mock:result");
+
from("direct:detachRolePolicy").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=detachRolePolicy")
+ .to("mock:result");
+ // Instance profile operations
+ from("direct:createInstanceProfile")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createInstanceProfile").to("mock:result");
+ from("direct:deleteInstanceProfile")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteInstanceProfile").to("mock:result");
+ from("direct:getInstanceProfile")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getInstanceProfile").to("mock:result");
+ from("direct:listInstanceProfiles")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listInstanceProfiles").to("mock:result");
+ from("direct:addRoleToInstanceProfile")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=addRoleToInstanceProfile").to("mock:result");
+ from("direct:removeRoleFromInstanceProfile")
+
.to("aws2-iam://test?iamClient=#amazonIAMClient&operation=removeRoleFromInstanceProfile")
+ .to("mock:result");
}
};
}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IAM2EndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IAM2EndpointBuilderFactory.java
index 6880ada43b72..6b7f0c66554b 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IAM2EndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IAM2EndpointBuilderFactory.java
@@ -763,6 +763,199 @@ public interface IAM2EndpointBuilderFactory {
public String awsIAMGroupId() {
return "CamelAwsIAMGroupId";
}
+ /**
+ * The name of an AWS IAM Role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMRoleName}.
+ */
+ public String awsIAMRoleName() {
+ return "CamelAwsIAMRoleName";
+ }
+ /**
+ * The path of an AWS IAM Role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMRolePath}.
+ */
+ public String awsIAMRolePath() {
+ return "CamelAwsIAMRolePath";
+ }
+ /**
+ * The assume role policy document for the role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code
+ * AwsIAMAssumeRolePolicyDocument}.
+ */
+ public String awsIAMAssumeRolePolicyDocument() {
+ return "CamelAwsIAMAssumeRolePolicyDocument";
+ }
+ /**
+ * The ARN of the created or retrieved role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMRoleArn}.
+ */
+ public String awsIAMRoleArn() {
+ return "CamelAwsIAMRoleArn";
+ }
+ /**
+ * The ID of the created or retrieved role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMRoleId}.
+ */
+ public String awsIAMRoleId() {
+ return "CamelAwsIAMRoleId";
+ }
+ /**
+ * The description of an AWS IAM Role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMRoleDescription}.
+ */
+ public String awsIAMRoleDescription() {
+ return "CamelAwsIAMRoleDescription";
+ }
+ /**
+ * The name of an AWS IAM Policy.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyName}.
+ */
+ public String awsIAMPolicyName() {
+ return "CamelAwsIAMPolicyName";
+ }
+ /**
+ * The path of an AWS IAM Policy.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyPath}.
+ */
+ public String awsIAMPolicyPath() {
+ return "CamelAwsIAMPolicyPath";
+ }
+ /**
+ * The policy document.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyDocument}.
+ */
+ public String awsIAMPolicyDocument() {
+ return "CamelAwsIAMPolicyDocument";
+ }
+ /**
+ * The ARN of an AWS IAM Policy.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyArn}.
+ */
+ public String awsIAMPolicyArn() {
+ return "CamelAwsIAMPolicyArn";
+ }
+ /**
+ * The ID of an AWS IAM Policy.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyId}.
+ */
+ public String awsIAMPolicyId() {
+ return "CamelAwsIAMPolicyId";
+ }
+ /**
+ * The description of an AWS IAM Policy.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMPolicyDescription}.
+ */
+ public String awsIAMPolicyDescription() {
+ return "CamelAwsIAMPolicyDescription";
+ }
+ /**
+ * The name of an AWS IAM Instance Profile.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMInstanceProfileName}.
+ */
+ public String awsIAMInstanceProfileName() {
+ return "CamelAwsIAMInstanceProfileName";
+ }
+ /**
+ * The path of an AWS IAM Instance Profile.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMInstanceProfilePath}.
+ */
+ public String awsIAMInstanceProfilePath() {
+ return "CamelAwsIAMInstanceProfilePath";
+ }
+ /**
+ * The ARN of an AWS IAM Instance Profile.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMInstanceProfileArn}.
+ */
+ public String awsIAMInstanceProfileArn() {
+ return "CamelAwsIAMInstanceProfileArn";
+ }
+ /**
+ * The ID of an AWS IAM Instance Profile.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsIAMInstanceProfileId}.
+ */
+ public String awsIAMInstanceProfileId() {
+ return "CamelAwsIAMInstanceProfileId";
+ }
}
static IAM2EndpointBuilder endpointBuilder(String componentName, String
path) {
class IAM2EndpointBuilderImpl extends AbstractEndpointBuilder
implements IAM2EndpointBuilder, AdvancedIAM2EndpointBuilder {