Thanks a lot. This is an very interesting topic. May I ask some questions here:
What’s the environment setup required here, I assume it’s Windows, but I am confused how can we run the commands (such as sail, spcx), should we install any package locally?
I noticed in one of the post, it mentioned there is a SailPoint CLI utility, but the link seems not exists any more.
And if I understand correctly, this SaaS connector only handles endpoints connectivity which sits on cloud in IDN? it seems to WebServices connector of IIQ but in JavaScript, am I correct?
Also, do you have any idea, can such framework also used to connect application which is on-premise?
Sorry, due to private appointments, I did not make it to join the full live streaming in IDN part. And I am relatively new to IDN.
SaaS is a cloud based connector, so it is running in the IDN cloud. Because of this, the best use cases are for connecting to other cloud based resources
Right now to connect a SaaS connector to an on-prem source, you would need to somehow expose that on-prem source to the internet. It is probably best to use the VA in those cases since you have better control over access. As @bwong1 mentioned during the roadmap session, a SaaS connector that can run on-prem might be available in the longer term future.
I have tried to onboard the SaaS Airtable connector. Able to create and read accounts from local machine using postman.
Deployed connector into IDN:
The test connection is success. However the account aggregation is failing with following error message: java.lang.RuntimeException - java.lang.IllegalStateException: [ConnectorError] invalid output format: Schema validation error in path: [/: {"attributes":{"emai... did not match any of the specified OneOf schemas] (requestId: 95f1495a865f41348f7837bc220db1d3) - java.lang.RuntimeException: java.lang.IllegalStateException: [ConnectorError] invalid output format: Schema validation error in path: [/: {"attributes":{"emai... did not match any of the specified OneOf schemas] (requestId: 95f1495a865f41348f7837bc220db1d3) at com.sailpoint.mantis.qpoc.message.AccountAggregation.iterateResourceObjects(AccountAggregation.java:628) at com.sailpoint.mantis.qpoc.message.AccountAggregation.handleMessage_aroundBody0(AccountAggregation.java:333) at com.sailpoint.mantis.qpoc.message.AccountAggregation$AjcClosure1.run(AccountAggregation.java:1) at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:167) at com.sailpoint.atlas.metrics.MessageMetricsAspect.meterMessageTimeAndExceptions(MessageMetricsAspect.java:68) at com.sailpoint.mantis.qpoc.message.AccountAggregation.handleMessage(AccountAggregation.java:320) at com.sailpoint.atlas.messaging.server.TypeMessageHandler.handleMessage(TypeMessageHandler.java:87) at com.sailpoint.mantis.qpoc.QpocMessageHandler.handleMessage(QpocMessageHandler.java:50) at com.sailpoint.mantis.platform.message.ObjectConfigMessageHandler.handleMessage(ObjectConfigMessageHandler.java:33) at com.sailpoint.atlas.tracing.plugin.TracingMessageHandler.handleMessage(TracingMessageHandler.java:88) at com.sailpoint.atlas.message.DynamicMessageHandler$ChainedMessageHandlerAdapter.handleMessage(DynamicMessageHandler.java:46) at com.sailpoint.atlas.usage.plugin.UsageMessageHandler.handleMessage(UsageMessageHandler.java:36) at com.sailpoint.atlas.message.DynamicMessageHandler$ChainedMessageHandlerAdapter.handleMessage(DynamicMessageHandler.java:46) at com.sailpoint.atlas.message.DynamicMessageHandler.handleMessage(DynamicMessageHandler.java:36) at com.sailpoint.mantis.platform.message.SailPointContextMessageHandler.handleMessage(SailPointContextMessageHandler.java:55) at com.sailpoint.atlas.message.FailureNotificationHandler.handleMessage(FailureNotificationHandler.java:55) at com.sailpoint.atlas.message.RequestContextMessageHandler.handleMessage(RequestContextMessageHandler.java:72) at com.sailpoint.mantis.platform.message.ExceptionMessageHandler.handleMessage(ExceptionMessageHandler.java:49) at com.sailpoint.atlas.messaging.server.MessageProcessor.handleJobMessage(MessageProcessor.java:196) at com.sailpoint.atlas.messaging.server.MessageProcessor.handleMessage(MessageProcessor.java:129) at com.sailpoint.atlas.messaging.server.MessageProcessor.lambda$null$0(MessageProcessor.java:99) at com.sailpoint.atlas.messaging.server.MessageProcessor.withOrgLogging(MessageProcessor.java:171) at com.sailpoint.atlas.messaging.server.MessageProcessor.lambda$asyncHandleMessage$1(MessageProcessor.java:99) at com.sailpoint.atlas.messaging.server.impl.SourceRunnableImpl.run(SourceRunnableImpl.java:77) at com.sailpoint.atlas.messaging.server.impl.BufferedSourceQueue$IncrementingSourceRunnable.run(BufferedSourceQueue.java:181) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.IllegalStateException: [ConnectorError] invalid output format: Schema validation error in path: [/: {"attributes":{"emai... did not match any of the specified OneOf schemas] (requestId: 95f1495a865f41348f7837bc220db1d3) at com.sailpoint.connector.cloud.spconnect.SpConnectProxy$1.nextResponse(SpConnectProxy.java:277) at sailpoint.connector.cloud.CloudConnector$CloudBridgeIterator.buildDataBlockIterator(CloudConnector.java:1109) at sailpoint.connector.cloud.CloudConnector$CloudBridgeIterator.checkForMoreData(CloudConnector.java:1097) at sailpoint.connector.cloud.CloudConnector$CloudBridgeIterator.hasNext(CloudConnector.java:1023) at sailpoint.connector.ConnectorProxy$CustomizingIterator.peek(ConnectorProxy.java:738) at sailpoint.connector.ConnectorProxy$CustomizingIterator.hasNext(ConnectorProxy.java:765) at com.sailpoint.mantis.qpoc.message.AccountAggregation.iterateResourceObjects(AccountAggregation.java:596) ... 29 more
It appears the data going to IDN is not in the right format. It’s probably something with how your airtable data is setup or your account mapping in the connector-spec.json. Are you able to share your connector-spec.json as well as the data as it appears in postman when you run locally?