0

My goal (background info)

I want to develop a java microservice on cumulocity. It should be able to do the following:
I would send "112233" to the microservice as follows: https://myTenant.cumulocity.com/service/my-application-name/decode?data=112233
The microservice should then split the data into "11" for the first measurement and "22" for the second measurement etc. These measurements would be POSTed to cumulocity.

My problem

I am now stuck on getting the Hello, microservice tutorial to work. I can't deploy the microservice (zip file) to cumulocity. "error":"security/Forbidden","info":"https://www.cumulocity.com/guides/reference-guide/#error_reporting","message":"Access is denied"} (I am an admin user.)

I also tried to upload the zip file via the website, this created a HOSTED application instead of a MICROSERVICE. Uploading my zip via a POST request to a HOSTED application actually works (which I obviously don't need).

I suspect that I get the "access denied" error cause cumulocity thinks that I upload a HOSTED application to a MICROSERVICE.

What I've done so far

Code side

I downloaded the hello-world-microservice example from the cumulocity bitbucket development branch. (This code is not available on the default branch).
I changed the cumulocity versions to 9.3.0, only this version seems to exist.

The HelloWorldMain.java is unedited

This is my cumulocity.json manifest file: (the roles make no difference)

{  
 "apiVersion":"1",
 "type":"MICROSERVICE",
 "version":"@project.version@",
 "availability":"PRIVATE",
 "provider":{  
     "name":"Cumulocity GmbH"
 },
 "isolation":"MULTI_TENANT",
 "requiredRoles":[  
     "ROLE_APPLICATION_MANAGEMENT_ADMIN",
     "ROLE_MEASUREMENT_ADMIN",
     "ROLE_INVENTORY_ADMIN"
 ],
 "roles":[  
     "ROLE_APPLICATION_MANAGEMENT_ADMIN",
     "ROLE_MEASUREMENT_ADMIN",
     "ROLE_INVENTORY_ADMIN"
 ],
 "livenessProbe":{  
     "httpGet":{  
         "path":"/health",
         "port":80
     },
     "initialDelaySeconds":15,
     "periodSeconds":10
 },
 "readinessProbe":{  
     "httpGet":{  
         "path":"/health",
         "port":80
     }
 }
}

This is my application.properties file

application.name=my-application-name
server.port=80
C8Y.baseURL=https://myTenant.cumulocity.com
C8Y.bootstrap.tenant=myTenant
C8Y.bootstrap.user=servicebootstrap_my-application-name
C8Y.bootstrap.password={SECRET_BOOTSTRAP_PASSW}
C8Y.user={MY_USERNAME}
C8Y.password={SECRET_PASSW}
C8Y.bootstrap.register=true
C8Y.microservice.isolation=MULTI_TENANT
C8Y.bootstrap.initialDelay=10000

Cumulocity side

I successfully created a microservice application,
GET https://myTenant.cumulocity.com/application/applications/5886 returns:

{  
 "availability":"PRIVATE",
 "id":"5886",
 "key":"my-application-key",
 "manifest":{  
     "imports":[  
     ],
     "noAppSwitcher":true
 },
 "name":"my-application-name",
 "owner":{  
     "self":"https://myTenant.cumulocity.com/tenant/tenants/myTenant",
     "tenant":{  
         "id":"myTenant"
     }
 },
 "requiredRoles":[  
     "ROLE_APPLICATION_MANAGEMENT_ADMIN",
     "ROLE_MEASUREMENT_ADMIN",
     "ROLE_INVENTORY_ADMIN"
 ],
 "roles":[  
     "ROLE_APPLICATION_MANAGEMENT_ADMIN",
     "ROLE_MEASUREMENT_ADMIN",
     "ROLE_INVENTORY_ADMIN"
 ],
 "self":"https://myTenant.cumulocity.com/application/applications/5886",
 "type":"MICROSERVICE"
}

I also successfully subscribed to this application.

When I try to upload the zip file to cumulocity, I get this error: "error":"security/Forbidden","info":"https://www.cumulocity.com/guides/reference-guide/#error_reporting","message":"Access is denied"}
(Uploading to a HOSTED type application works fine, but I don't want that.)

note: I also tried to use the microservice deploy script, this gave the same result as doing everything manually.

Trying to run it locally

Since I couldn't get it to work on the cumulocity platform, I tried to run it locally via docker. I ran it with this command:
docker run -e "C8Y_MICROSERVICE_ISOLATION=MULTI_TENANT" 10aa0b73ddb3

note: I had to add the "C8Y_MICROSERVICE_ISOLATION=MULTI_TENANT" environment variable. if I didn't add this, I'd get credential/permission issues. This seems weird to me, since all other info is read from the application.properties file except for this one.

I have no errors when running this image on a local docker.

According to the Hello, microservice tutorial, I should be able to request curl -H "Authorization: {AUTHORIZATION}" https://myTenant.cumulocity.com/service/my-application-name/hello?who=me
This returns:
{"error":"microservice/Not Found","info":"https://www.cumulocity.com/guides/reference-guide/#error_reporting","message":"Microservice my-application-name not found."}

Back to the questions

Has anyone else had difficulties with setting up a microservice on cumulocity?
Is there something I'm totally overseeing?

1 Answers1

1

The microservice hosting needs to be assigned to your tenant otherwise it won't work and the API in that case will return forbidden. So it might be that it is no issue with your user but that your tenant has the feature not activated.

TyrManuZ
  • 2,039
  • 1
  • 14
  • 23
  • How would I be able to activate that "microservice hosting" feature? (I am the owner of the account, could it matter that it is a trial account?) – Timothy Van Wichelen Apr 13 '18 at 16:41
  • This can only be activated through the owner of the system. By default it is not assigned to tenants so trial accounts won't have it. So if you have a tenant on cumulocity.com this feature can only be enabled through someone at Cumulocity. – TyrManuZ Apr 14 '18 at 08:47