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

Error on finders if the resource does not have a field with @Id annotation #334

Closed deepanjan90 closed 3 years ago

deepanjan90 commented 3 years ago

Describe the bug An error occurs when a external query is fired for a resource that does not have a field with the @Id annotation

To Reproduce Create a resource without any field having the @Id notation. Create a finder for that resource. Fire an external query for the just created resource.

Expected behavior Unless a client exception occurs either return results or empty list if none are found.

Stacktrace

Error: Can't process the @print directive!

In pubsub/topic.gyro on line 1 from column 1 to 42:
1: @print: $(external-query google::topic {})

Caused by: Error: Can't resolve external-query reference!

In pubsub/topic.gyro on line 1 from column 9 to 42:
1: @print: $(external-query google::topic {})

Caused by: Error: null

Caused by: Unexpected error: java.lang.NullPointerException
    at gyro.core.resource.DiffableType.newExternal(DiffableType.java:159)
    at gyro.core.resource.DiffableType.newExternalWithCredentials(DiffableType.java:164)
    at gyro.core.finder.Finder.newResource(Finder.java:50)
    at gyro.google.GoogleFinder.newResource(GoogleFinder.java:80)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at gyro.google.GoogleFinder.findAll(GoogleFinder.java:41)
    at gyro.core.reference.FinderReferenceResolver.resolve(FinderReferenceResolver.java:97)
    at gyro.core.scope.NodeEvaluator.visitReference(NodeEvaluator.java:691)
    at gyro.core.scope.NodeEvaluator.visitReference(NodeEvaluator.java:81)
    at gyro.lang.ast.value.ReferenceNode.accept(ReferenceNode.java:56)
    at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
    at gyro.core.OptionArgumentProcessor.convert(OptionArgumentProcessor.java:106)
    at gyro.core.OptionArgumentProcessor.getArgument(OptionArgumentProcessor.java:131)
    at gyro.core.PrintDirectiveProcessor.process(PrintDirectiveProcessor.java:32)
    at gyro.core.scope.NodeEvaluator.visitDirective(NodeEvaluator.java:383)
    at gyro.core.scope.NodeEvaluator.visitDirective(NodeEvaluator.java:81)
    at gyro.lang.ast.block.DirectiveNode.accept(DirectiveNode.java:77)
    at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
    at gyro.core.scope.NodeEvaluator.lambda$evaluateBody$31(NodeEvaluator.java:341)
    at gyro.core.scope.Defer.execute(Defer.java:50)
    at gyro.core.scope.NodeEvaluator.evaluateBody(NodeEvaluator.java:341)
    at gyro.core.scope.NodeEvaluator.visitFile(NodeEvaluator.java:424)
    at gyro.core.scope.NodeEvaluator.visitFile(NodeEvaluator.java:81)
    at gyro.lang.ast.block.FileNode.accept(FileNode.java:32)
    at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
    at gyro.core.scope.NodeEvaluator.lambda$evaluateBody$31(NodeEvaluator.java:341)
    at gyro.core.scope.Defer.execute(Defer.java:50)
    at gyro.core.scope.NodeEvaluator.evaluateBody(NodeEvaluator.java:341)
    at gyro.core.scope.NodeEvaluator.evaluate(NodeEvaluator.java:325)
    at gyro.core.scope.RootScope.evaluate(RootScope.java:427)
    at gyro.core.command.AbstractConfigCommand.doExecute(AbstractConfigCommand.java:179)
    at gyro.core.command.AbstractCommand.execute(AbstractCommand.java:75)
    at gyro.core.command.AbstractCommand.call(AbstractCommand.java:80)
    at gyro.core.command.AbstractCommand.call(AbstractCommand.java:41)
    at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
    at picocli.CommandLine.access$1100(CommandLine.java:145)
    at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
    at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
    at picocli.CommandLine.execute(CommandLine.java:2058)
    at gyro.cli.Gyro.run(Gyro.java:262)
    at gyro.cli.Gyro.main(Gyro.java:89)
    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)

Additional context Gyro should not error out in such a situation as this is not user rectifiable.