CertificateArn error on executing ggp.sh
Closed this issue · 9 comments
Hi,
Recently I faced a certificate error on executing ggp.sh.
I created new greengrass group, and then tried to update it.
Then, ggp.sh
print out the following errors regarding certifcate.
Failed to invoke public com.awslabs.iot.data.CertificateArn() with no args
I run these steps for latest aws-greengrass-lambda-functions
, same error occured.
I don't know why this happens exactly.
@timmattison, could you check this issue ?
MacBook-Pro:aws-greengrass-lambda-functions chan376$ ./ggp.sh -a X86_64 -g test111 -d deployments/python3-mqtt-client.conf
Using aws-greengrass-provisioner repo branch master
master: Pulling from timmattison/aws-greengrass-provisioner
Digest: sha256:1ccc35c255e0638026fd9781d43721c425cde2d66bd7fc736ba27d5cdf35ed85
Status: Image is up to date for timmattison/aws-greengrass-provisioner:master
sha256:4ba308501575d40f792c3a2f062b60175e4d059e1dab5cb957349e6cb5949c5f
a97794ac525ee044a9e75336d847cf07c25303770952ea685441c65e42bf75c4
[WARN] BasicDeploymentArgumentHelper: No MQTT port value was set, using default [8883]
[INFO] BasicDeploymentHelper: No environment variables specified in this deployment
[INFO] BasicDeploymentHelper: Creating a Greengrass group, if necessary
[INFO] BasicGreengrassHelper: Group already exists, not creating a new one
[INFO] BasicDeploymentHelper: Creating core thing
[INFO] BasicFunctionHelper: Enabled functions:
[INFO] BasicFunctionHelper: MqttClientPython3
[WARN] BasicConnectorHelper: No connectors enabled
[INFO] BasicDeploymentHelper: Creating connector definition
[INFO] BasicDeploymentHelper: Creating Greengrass core role [Greengrass_CoreRole]
[INFO] BasicV2IamHelper: Updating assume role policy for existing role [Greengrass_CoreRole]
[INFO] BasicDeploymentHelper: Attaching role policies to Greengrass core role [Greengrass_CoreRole]
[INFO] BasicDeploymentHelper: Creating Greengrass service role [Greengrass_ServiceRole]
[INFO] BasicV2IamHelper: Updating assume role policy for existing role [Greengrass_ServiceRole]
[INFO] BasicDeploymentHelper: Attaching role policies to Greengrass service role [Greengrass_ServiceRole]
[INFO] BasicDeploymentHelper: Associating Greengrass service role to account
[INFO] BasicIotHelper: - Attempting to reuse existing keys.
[ERROR] AwsGreengrassProvisioner: Failed to invoke public com.awslabs.iot.data.CertificateArn() with no args
java.lang.RuntimeException: Failed to invoke public com.awslabs.iot.data.CertificateArn() with no args
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)
at com.awslabs.aws.greengrass.provisioner.data.GsonAdaptersKeysAndCertificate$KeysAndCertificateTypeAdapter.readInCertificateArn(GsonAdaptersKeysAndCertificate.java:133)
at com.awslabs.aws.greengrass.provisioner.data.GsonAdaptersKeysAndCertificate$KeysAndCertificateTypeAdapter.eachAttribute(GsonAdaptersKeysAndCertificate.java:108)
at com.awslabs.aws.greengrass.provisioner.data.GsonAdaptersKeysAndCertificate$KeysAndCertificateTypeAdapter.readKeysAndCertificate(GsonAdaptersKeysAndCertificate.java:96)
at com.awslabs.aws.greengrass.provisioner.data.GsonAdaptersKeysAndCertificate$KeysAndCertificateTypeAdapter.read(GsonAdaptersKeysAndCertificate.java:70)
at com.awslabs.aws.greengrass.provisioner.data.GsonAdaptersKeysAndCertificate$KeysAndCertificateTypeAdapter.read(GsonAdaptersKeysAndCertificate.java:35)
at com.google.gson.Gson.fromJson(Gson.java:932)
at com.google.gson.Gson.fromJson(Gson.java:897)
at com.google.gson.Gson.fromJson(Gson.java:846)
at com.google.gson.Gson.fromJson(Gson.java:817)
at com.awslabs.general.helpers.implementations.BasicJsonHelper.fromJson(BasicJsonHelper.java:38)
at com.awslabs.aws.greengrass.provisioner.interfaces.helpers.IoHelper.lambda$deserializeObject$c02ed260$1(IoHelper.java:151)
at io.vavr.control.Try.of(Try.java:75)
at com.awslabs.aws.greengrass.provisioner.interfaces.helpers.IoHelper.deserializeObject(IoHelper.java:151)
at com.awslabs.aws.greengrass.provisioner.interfaces.helpers.IoHelper.deserializeKeys(IoHelper.java:167)
at com.awslabs.aws.greengrass.provisioner.implementations.helpers.BasicIotHelper.loadKeysAndCertificate(BasicIotHelper.java:63)
at com.awslabs.aws.greengrass.provisioner.implementations.helpers.BasicDeploymentHelper.execute(BasicDeploymentHelper.java:656)
at com.awslabs.aws.greengrass.provisioner.implementations.helpers.BasicDeploymentHelper.execute(BasicDeploymentHelper.java:67)
at com.awslabs.aws.greengrass.provisioner.interfaces.helpers.Operation.executeOrDisplayHelp(Operation.java:33)
at io.vavr.control.Try.onSuccess(Try.java:712)
at com.awslabs.aws.greengrass.provisioner.interfaces.helpers.Operation.execute(Operation.java:21)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.lambda$run$3(AwsGreengrassProvisioner.java:81)
at java.base/java.util.Optional.map(Optional.java:265)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.lambda$run$da6d192b$1(AwsGreengrassProvisioner.java:81)
at io.vavr.control.Try.of(Try.java:75)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.run(AwsGreengrassProvisioner.java:76)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.runProvisioner(AwsGreengrassProvisioner.java:56)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.lambda$main$0(AwsGreengrassProvisioner.java:29)
at io.vavr.control.Try.run(Try.java:118)
at com.awslabs.aws.greengrass.provisioner.AwsGreengrassProvisioner.main(AwsGreengrassProvisioner.java:29)
Caused by: java.lang.InstantiationException
at java.base/jdk.internal.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:110)
... 30 more
[ERROR] AwsGreengrassProvisioner: Failed to invoke public com.awslabs.iot.data.CertificateArn() with no args
That’s odd. That is a new class though. Will investigate tomorrow.
I just found if ggp.sh
is executed with --certifcate-arn
option and its value, it works perfectly. But I wonder that the option is to be mandatory recently for deploy a greengrass group already created.
No, this is definitely a bug. Your workaround is sufficient for now but I definitely broke something that I didn't test very well. I'm working on it.
This is uglier than I thought. On one JVM it works fine, on another it doesn't. Requires more time to get something stable. Sorry for the inconvenience.
I think I figured it out. Running some tests now. Will be updated either tonight or tomorrow morning.
@timmattison, thanks for your quick response. I will try to run ggp.sh
if fixed version is applied.
It may not work on a group that has an invalid credentials file saved. So try it with a new group if that fails.
BTW, with #564 you can now update a group even if the credentials directory is missing.
Closing for now, please reopen if it is still an issue.