Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Can't parse docker-credential-gcloud multiline output #930

Closed
giannello opened this issue Jan 17, 2018 · 3 comments
Closed

[BUG] Can't parse docker-credential-gcloud multiline output #930

giannello opened this issue Jan 17, 2018 · 3 comments
Labels

Comments

@giannello
Copy link
Contributor

Description

When using docker-credential-gcloud, the plugin fails to parse the JSON credentials returned by the helper.

[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.24-SNAPSHOT:build (default-build) on project test-docker-maven-plugin: Execution default-build of goal io.fabric8:docker-maven-plugin:0.24-SNAPSHOT:build failed: A JSONObject text must begin with '{' at 1 [character 2 line 1] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal io.fabric8:docker-maven-plugin:0.24-SNAPSHOT:build (default-build) on project airflow: Execution default-build of goal io.fabric8:docker-maven-plugin:0.24-SNAPSHOT:build failed: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:993)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:345)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:191)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-build of goal io.fabric8:docker-maven-plugin:0.24-SNAPSHOT:build failed: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:993)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:345)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:191)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.json.JSONTokener.syntaxError (JSONTokener.java:433)
    at org.json.JSONObject.<init> (JSONObject.java:194)
    at io.fabric8.maven.docker.util.CredentialHelperClient$GetCommand.getCredentialNode (CredentialHelperClient.java:111)
    at io.fabric8.maven.docker.util.CredentialHelperClient.getAuthConfig (CredentialHelperClient.java:38)
    at io.fabric8.maven.docker.util.AuthConfigFactory.extractAuthConfigFromCredentialsHelper (AuthConfigFactory.java:351)
    at io.fabric8.maven.docker.util.AuthConfigFactory.getAuthConfigFromDockerConfig (AuthConfigFactory.java:320)
    at io.fabric8.maven.docker.util.AuthConfigFactory.createAuthConfig (AuthConfigFactory.java:119)
    at io.fabric8.maven.docker.service.RegistryService.createAuthConfig (RegistryService.java:139)
    at io.fabric8.maven.docker.service.RegistryService.pullImageWithPolicy (RegistryService.java:98)
    at io.fabric8.maven.docker.service.BuildService.autoPullBaseImage (BuildService.java:209)
    at io.fabric8.maven.docker.service.BuildService.buildImage (BuildService.java:58)
    at io.fabric8.maven.docker.BuildMojo.buildAndTag (BuildMojo.java:59)
    at io.fabric8.maven.docker.BuildMojo.executeInternal (BuildMojo.java:44)
    at io.fabric8.maven.docker.AbstractDockerMojo.execute (AbstractDockerMojo.java:220)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:993)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:345)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:191)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)

The helper works correctly when invoked standalone

giuseppe@zeug:~$ echo 'https://gcr.io' | docker-credential-gcloud get
{
  "Secret": "[REDACTED]",
  "Username": "oauth2accesstoken"
}
giuseppe@zeug:~$

The issue seems to arise from the ExternalCommand class, where the output of the commands are read/returned line by line.
The output of docker-credential-gcloud contains multilines, and this confuses the parser into using only the last line - and failing to find a valid json.

Info

  • d-m-p version: 0.24-SNAPSHOT (17/1/2018)
  • Maven version (mvn -v):
Apache Maven 3.5.0
Maven home: /usr/share/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-21-generic", arch: "amd64", family: "unix"
  • Docker version: Docker version 17.12.0-ce, build c97c6d6
  • If it's a bug, how to reproduce: enable the docker-credential-gcloud and try to push/pull an image hosted in GCR
@giannello giannello changed the title Can't parse docker-credential-gcloud multiline output [BUG] Can't parse docker-credential-gcloud multiline output Jan 19, 2018
@giannello
Copy link
Contributor Author

@rhuss would you mind taking a look at the proposed changes?

@rhuss
Copy link
Collaborator

rhuss commented Feb 20, 2018

Agree that this is a bug and multilines should be concatenated.

Fancy doing a PR ?

(sorry for being late, I was skiing last week ;-)

@rhuss rhuss closed this as completed in b75bbff Apr 4, 2018
rhuss added a commit that referenced this issue Apr 4, 2018
Fix #930: Handle multi line credential helper responses
@denisa
Copy link
Contributor

denisa commented Apr 5, 2018

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants