Skip to content

Commit 561db0f

Browse files
Fix connector private IP validation when executing agent without remote model (#3862)
* Fix bug in execute with private IP Signed-off-by: Nathalie Jonathan <nathhjo@amazon.com> * Use isConnectorPrivateIpEnabled() from mlFeatureEnabledSetting Signed-off-by: Nathalie Jonathan <nathhjo@amazon.com> * Remove redundant changes Signed-off-by: Nathalie Jonathan <nathhjo@amazon.com> --------- Signed-off-by: Nathalie Jonathan <nathhjo@amazon.com>
1 parent 2df984d commit 561db0f

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

ml-algorithms/src/test/java/org/opensearch/ml/engine/algorithms/remote/HttpJsonConnectorExecutorTest.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ public void invokeRemoteService_invalidIpAddress() {
9090
.actions(Arrays.asList(predictAction))
9191
.build();
9292
HttpJsonConnectorExecutor executor = new HttpJsonConnectorExecutor(connector);
93+
AtomicBoolean privateIpEnabled = new AtomicBoolean(false);
94+
executor.setConnectorPrivateIpEnabled(privateIpEnabled);
9395
executor
9496
.invokeRemoteService(
9597
PREDICT.name(),
@@ -134,8 +136,27 @@ public void invokeRemoteService_EnabledPrivateIpAddress() {
134136
actionListener
135137
);
136138
Mockito.verify(actionListener, never()).onFailure(any());
139+
}
137140

138-
privateIpEnabled.set(false);
141+
@Test
142+
public void invokeRemoteService_DisabledPrivateIpAddress() {
143+
ConnectorAction predictAction = ConnectorAction
144+
.builder()
145+
.actionType(PREDICT)
146+
.method("POST")
147+
.url("http://127.0.0.1/mock")
148+
.requestBody("{\"input\": \"${parameters.input}\"}")
149+
.build();
150+
Connector connector = HttpConnector
151+
.builder()
152+
.name("test connector")
153+
.version("1")
154+
.protocol("http")
155+
.actions(Arrays.asList(predictAction))
156+
.build();
157+
HttpJsonConnectorExecutor executor = new HttpJsonConnectorExecutor(connector);
158+
AtomicBoolean privateIpEnabled = new AtomicBoolean(false);
159+
executor.setConnectorPrivateIpEnabled(privateIpEnabled);
139160
executor
140161
.invokeRemoteService(
141162
PREDICT.name(),
@@ -168,6 +189,8 @@ public void invokeRemoteService_Empty_payload() {
168189
.actions(Arrays.asList(predictAction))
169190
.build();
170191
HttpJsonConnectorExecutor executor = new HttpJsonConnectorExecutor(connector);
192+
AtomicBoolean privateIpEnabled = new AtomicBoolean(false);
193+
executor.setConnectorPrivateIpEnabled(privateIpEnabled);
171194
executor.invokeRemoteService(PREDICT.name(), createMLInput(), new HashMap<>(), null, new ExecutionContext(0), actionListener);
172195
ArgumentCaptor<Exception> captor = ArgumentCaptor.forClass(IllegalArgumentException.class);
173196
Mockito.verify(actionListener, times(1)).onFailure(captor.capture());

plugin/src/main/java/org/opensearch/ml/action/connector/ExecuteConnectorTransportAction.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.opensearch.core.xcontent.NamedXContentRegistry;
1919
import org.opensearch.ml.common.connector.Connector;
2020
import org.opensearch.ml.common.connector.ConnectorAction;
21+
import org.opensearch.ml.common.settings.MLFeatureEnabledSetting;
2122
import org.opensearch.ml.common.transport.MLTaskResponse;
2223
import org.opensearch.ml.common.transport.connector.MLConnectorDeleteRequest;
2324
import org.opensearch.ml.common.transport.connector.MLExecuteConnectorAction;
@@ -43,6 +44,7 @@ public class ExecuteConnectorTransportAction extends HandledTransportAction<Acti
4344

4445
ConnectorAccessControlHelper connectorAccessControlHelper;
4546
EncryptorImpl encryptor;
47+
MLFeatureEnabledSetting mlFeatureEnabledSetting;
4648

4749
@Inject
4850
public ExecuteConnectorTransportAction(
@@ -53,7 +55,8 @@ public ExecuteConnectorTransportAction(
5355
ScriptService scriptService,
5456
NamedXContentRegistry xContentRegistry,
5557
ConnectorAccessControlHelper connectorAccessControlHelper,
56-
EncryptorImpl encryptor
58+
EncryptorImpl encryptor,
59+
MLFeatureEnabledSetting mlFeatureEnabledSetting
5760
) {
5861
super(MLExecuteConnectorAction.NAME, transportService, actionFilters, MLConnectorDeleteRequest::new);
5962
this.client = client;
@@ -62,6 +65,7 @@ public ExecuteConnectorTransportAction(
6265
this.xContentRegistry = xContentRegistry;
6366
this.connectorAccessControlHelper = connectorAccessControlHelper;
6467
this.encryptor = encryptor;
68+
this.mlFeatureEnabledSetting = mlFeatureEnabledSetting;
6569
}
6670

6771
@Override
@@ -77,6 +81,7 @@ protected void doExecute(Task task, ActionRequest request, ActionListener<MLTask
7781
connector.decrypt(connectorAction, (credential, tenantId) -> encryptor.decrypt(credential, null), null);
7882
RemoteConnectorExecutor connectorExecutor = MLEngineClassLoader
7983
.initInstance(connector.getProtocol(), connector, Connector.class);
84+
connectorExecutor.setConnectorPrivateIpEnabled(mlFeatureEnabledSetting.isConnectorPrivateIpEnabled());
8085
connectorExecutor.setScriptService(scriptService);
8186
connectorExecutor.setClusterService(clusterService);
8287
connectorExecutor.setClient(client);

plugin/src/test/java/org/opensearch/ml/action/connector/ExecuteConnectorTransportActionTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.opensearch.ml.common.connector.Connector;
3131
import org.opensearch.ml.common.connector.ConnectorProtocols;
3232
import org.opensearch.ml.common.connector.HttpConnector;
33+
import org.opensearch.ml.common.settings.MLFeatureEnabledSetting;
3334
import org.opensearch.ml.common.transport.MLTaskResponse;
3435
import org.opensearch.ml.common.transport.connector.MLExecuteConnectorRequest;
3536
import org.opensearch.ml.engine.encryptor.EncryptorImpl;
@@ -70,6 +71,8 @@ public class ExecuteConnectorTransportActionTests extends OpenSearchTestCase {
7071
@Mock
7172
private EncryptorImpl encryptor;
7273
@Mock
74+
private MLFeatureEnabledSetting mlFeatureEnabledSetting;
75+
@Mock
7376
private HttpConnector connector;
7477
@Mock
7578
private Task task;
@@ -109,7 +112,8 @@ public void setup() {
109112
scriptService,
110113
xContentRegistry,
111114
connectorAccessControlHelper,
112-
encryptor
115+
encryptor,
116+
mlFeatureEnabledSetting
113117
);
114118
}
115119

0 commit comments

Comments
 (0)