perfectsense / gyro

Gyro is a command-line tool for creating, updating, and maintaining cloud infrastructure. Gyro makes infrastructure-as-code possible.
https://gyro.dev
Apache License 2.0
134 stars 7 forks source link

Connection through a proxy #390

Closed abriceno closed 2 years ago

abriceno commented 2 years ago

Hello Gyro team,

For reasons of control, a proxy is now being used for outputs. At the moment, the proxy does not have content control and can connect to any site on the Internet. But, when I initialize Gyro with the proxy I get an error that it can't connect to the endpoints. I have configured the environment variables in my console: http_proxy, https_proxy, HTTP_PROXY and HTTPS_PROXY



Caused by: Unexpected error: org.eclipse.aether.resolution.DependencyResolutionException: Failed to read artifact descriptor for gyro:gyro-aws-provider:jar:1.4.3
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:387)
    at gyro.core.plugin.PluginPreprocessor.preprocess(PluginPreprocessor.java:148)
    at gyro.core.scope.RootScope.load(RootScope.java:395)
    at gyro.cli.Gyro.lambda$main$1(Gyro.java:83)
    at java.base/java.util.Optional.ifPresent(Optional.java:183)
    at gyro.cli.Gyro.main(Gyro.java:82)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to read artifact descriptor for gyro:gyro-aws-provider:jar:1.4.3
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:208)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:341)
    ... 13 more
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for gyro:gyro-aws-provider:jar:1.4.3
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:329)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:198)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:202)
    ... 14 more
Caused by: org.apache.maven.model.resolution.UnresolvableModelException: Could not transfer artifact software.amazon.awssdk:bom:pom:2.16.96 from/to https://artifactory.psdops.com/gyro-snapshots (https://artifactory.psdops.com/gyro-snapshots): connect timed out
    at org.apache.maven.repository.internal.DefaultModelResolver.resolveModel(DefaultModelResolver.java:177)
    at org.apache.maven.model.building.DefaultModelBuilder.importDependencyManagement(DefaultModelBuilder.java:1192)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:455)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:421)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:411)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:320)
    ... 16 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact software.amazon.awssdk:bom:pom:2.16.96 from/to https://artifactory.psdops.com/gyro-snapshots (https://artifactory.psdops.com/gyro-snapshots): connect timed out
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:223)
    at org.apache.maven.repository.internal.DefaultModelResolver.resolveModel(DefaultModelResolver.java:173)
    ... 21 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact software.amazon.awssdk:bom:pom:2.16.96 from/to https://artifactory.psdops.com/gyro-snapshots (https://artifactory.psdops.com/gyro-snapshots): connect timed out
    at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:43)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:581)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:249)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:520)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:421)
    ... 24 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
    at java.base/java.net.Socket.connect(Socket.java:591)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:542)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:164)
    at org.eclipse.aether.transport.http.HttpTransporter.execute(HttpTransporter.java:318)
    at org.eclipse.aether.transport.http.HttpTransporter.implGet(HttpTransporter.java:274)
    at org.eclipse.aether.spi.connector.transport.AbstractTransporter.get(AbstractTransporter.java:59)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:447)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:350)
    ... 29 more```
beetlebugorg commented 2 years ago

It looks like we'll need to add support for setting proxies for both repository resolution and for the providers themselves.

The usual Java method of setting -Dhttps.proxyHost=<host> -Dhttps.proxyport=<port> is being ignored by HttpClient which is used by Aether (the dependency resolution library) and AWS SDK.

beetlebugorg commented 2 years ago

In #391 I added support for using the http_proxy or https_proxy environment variable to configure Gyro to use a proxy for fetching plugins. You may also need the updated aws provider which adds support as well.