-
Notifications
You must be signed in to change notification settings - Fork 36
Azure Blob Storage integration #1189
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
base: main
Are you sure you want to change the base?
Conversation
| sovity.logging.level: 'DEBUG' | ||
| provider-connector-db: | ||
| image: 'docker.io/postgres:17-alpine' | ||
| image: 'docker.io/postgres:16-alpine' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please use postgres:17 for both images
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I'm using v17, which was default in the version I've checked out, errors occur and the database is not working. If you want, I can reproduce the error and paste the error message as a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please make sure, that you have pulled the corresponding docker container postgres:17-alpine. If it still does not work, please provide the logs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the output when I'm running the docker compose file
[+] Running 4/4
✔ Container local-demo-ce-consumer-ui-1 Recreated 0.2s
✔ Container local-demo-ce-provider-connector-db-1 Recreated 0.2s
✔ Container local-demo-ce-provider-ui-1 Recreated 0.2s
✔ Container local-demo-ce-consumer-connector-db-1 Recreated 0.2s
Attaching to consumer-1, consumer-connector-1, consumer-connector-db-1, consumer-ui-1, provider-1, provider-connector-1, provider-connector-db-1, provider-ui-1
consumer-connector-db-1 |
consumer-connector-db-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
consumer-connector-db-1 |
provider-connector-db-1 |
provider-connector-db-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
provider-connector-db-1 |
consumer-connector-db-1 | 2025-10-30 08:19:43.449 UTC [1] FATAL: database files are incompatible with server
consumer-connector-db-1 | 2025-10-30 08:19:43.449 UTC [1] DETAIL: The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 17.5.
provider-connector-db-1 | 2025-10-30 08:19:43.449 UTC [1] FATAL: database files are incompatible with server
provider-connector-db-1 | 2025-10-30 08:19:43.449 UTC [1] DETAIL: The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 17.5.
dependency failed to start: container local-demo-ce-consumer-connector-db-1 is unhealthy
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've tested the docker compose at that version and it works, try resetting your volumes: docker compose down -v -t 1
| <Button | ||
| dataTestId={'btn-open-azure-blob-select'} | ||
| type="button" | ||
| onClick={() => setIsAzureOpen(true)} | ||
| > | ||
| Select Blob | ||
| </Button> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of this button, it would be better if this is another item in the "Type" Dropdown. Then decide, what looks better:
- keep it in a dialog
- move it directly into the form
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you mean with "another item in the "Type" Dropdown"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok nvm, I got it. I've added a new Type in the dropdown.
| }, [sasToken, storageSasToken, storageAccountName, containerName, blobName, setSelectionAllowed]); | ||
|
|
||
| return ( | ||
| <div className="p-6 max-w-6xl mx-auto grid gap-4"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To have this integrated in the existing UI, please take a look at other places, where we are using input forms inside dialogs, for example add-counterparty-dialog.tsx
This makes it easier to handle changes of values as well as potential validation.
Additionally, this way the form looks more similar to other forms.
Also, please think about if it would allow an easier flow for the user, if elements that should only be used later are conditionally rendered. For example, show the Blob selection only if an container was selected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've updated the code accordingly.
| ) as DataOfferLiveAzureBlobFormValue; | ||
|
|
||
| useEffect(() => { | ||
| console.log(`azureDataAddress: ${azureDataAddress}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please remove any console.log's
| form, | ||
| formKeyDataOfferTypeLive, | ||
| }: { | ||
| form, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
run npm run format-all to have a consistent formatting
| sovity.dataspace.kind: 'sovity-mock-iam' | ||
| edc.participant.id: 'consumer' | ||
| sovity.http.protocol: 'http://' | ||
| sovity.print.config: 'true' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
| edc.participant.id: 'consumer' | ||
| sovity.http.protocol: 'http://' | ||
| sovity.print.config: 'true' | ||
| sovity.logging.level: 'DEBUG' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest, that in the list of available containers and blobs, each entry is selectable and will automatically fill out the "Container Name" and "Blob Name" form field respectively
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added your suggested functionality.
| account: values.storageAccountName, | ||
| container: values.containerName, | ||
| blobName: values.blobName, | ||
| keyName: "key1", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| keyName: "key1", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've made changes to write down a key name (keyName) which has to be the same as used in the vault.
| sovity.logging.level: 'DEBUG' | ||
| provider-connector-db: | ||
| image: 'docker.io/postgres:17-alpine' | ||
| image: 'docker.io/postgres:16-alpine' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've tested the docker compose at that version and it works, try resetting your volumes: docker compose down -v -t 1
| <DialogHeader> | ||
| <DialogTitle>Select Azure Blob</DialogTitle> | ||
| </DialogHeader> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this be integrated into the form (same UX as surrounding), with the same sections as the other data source types and the building of the data source / data sink happening on submit?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've based my decision on component AddCounterpartyDialog.tsx:
<DialogHeader> <DialogTitle>Add New Chat</DialogTitle> <DialogDescription> Enter the details of the counterparty you want to chat with. </DialogDescription> </DialogHeader>
| name="sasToken" | ||
| render={({ field }) => ( | ||
| <FormItem> | ||
| <FormLabel>SAS Token</FormLabel> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this the same SAS token as above?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I renamed the Labels accordingly
| name="sasToken" | ||
| render={({ field }) => ( | ||
| <FormItem> | ||
| <FormLabel>SAS Token</FormLabel> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As @mmaeffert mentioned, an integration of the EDC secrets, wouldn't it require backend code as well, as secrets cannot be expected to be passed into a frontend?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately, I don't quite understand what the comment means. The token at that point in the dialog is only used for a query made here to Azure to display the available containers. The same applies to the blobs. After selecting the blob and closing the dialog, the entry expires. Only the storage account key is used to retrieve the blob via the extension. This is entered beforehand via the vault.

Checklist