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

feat(nextcloud): add notify_push support #581

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

wrenix
Copy link
Collaborator

@wrenix wrenix commented Jun 9, 2024

Pull Request

Description of the change

Not yet tested

Benefits

  • support notify_push
  • improve ServiceMonitor (to collect data from nextcloud-exporter and notify_push)

Possible drawbacks

Applicable issues

Additional information

Checklist

TODO

  • redis password from existing secret (or URL)
  • put redis password from env to secrets
  • solve bootstrap problem (nextcloud and notify_push needs to be online)
  • option to set urlEnv on notifyPush (for external redis)

@wrenix wrenix force-pushed the feat/notify_push branch 2 times, most recently from 4c3cee5 to 46eb0e9 Compare June 9, 2024 22:57
@wrenix wrenix mentioned this pull request Jun 9, 2024
3 tasks
@wrenix wrenix force-pushed the feat/notify_push branch 3 times, most recently from f5f716e to 6ed673a Compare June 9, 2024 23:19
@AndreKoepke
Copy link

Can we ensure that the notify_push-plugin is installed? Maybe something like this?

 lifecycle:
      postStart:
        exec:
          command: ["occ",  "app:install notify_push"]

And we have to active that plugin by running sudo -u www-data ./occ notify_push:setup https://NEXTCLOUD_HOST/push. Maybe we should add a little script like this (pseudocode):

if (!notify_push installed)
  install notify_push
/occ notify_push:setup https://NEXTCLOUD_HOST/push

@provokateurin
Copy link
Member

I think it makes sense to give this option so the installation and setup is completely automatic, but I'd rather put it behind a second config flag:

notify_push:
	enabled: true
	automatic_setup: true

Maybe some people don't want to have this done automatically, so it's nice to give them the option.

@wrenix
Copy link
Collaborator Author

wrenix commented Jun 14, 2024

Therefore we has that hook of the container script (see #525), i write a ConfigMap for it.

PS: the same way, then in #480 (@provokateurin you wanted to take a look there ...)

PSS: Does somebody test this/my code?

@wrenix wrenix force-pushed the feat/notify_push branch from 65046cb to 7bb1bb9 Compare June 14, 2024 21:21
@AndreKoepke
Copy link

AndreKoepke commented Jun 17, 2024

andre@server:~/k8s/nextcloud$ helm upgrade -n nextcloud akops-nextcloud -f values.yml ./helm/charts/nextcloud/
Error: UPGRADE FAILED: template: nextcloud/templates/notify_push/deployment.yaml:41:31: executing "nextcloud/templates/notify_push/deployment.yaml" at <$.Values.global.image.registry>: nil pointer evaluating interface {}.image

Copy link

@AndreKoepke AndreKoepke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I remove the global-references, then I got this error:

andre@server:~/k8s/nextcloud$ helm upgrade -n nextcloud akops-nextcloud -f values.yml ./helm/charts/nextcloud/
Error: UPGRADE FAILED: YAML parse error on nextcloud/templates/notify_push/deployment.yaml: error converting YAML to JSON: yaml: line 41: did not find expected key

charts/nextcloud/templates/notify_push/deployment.yaml Outdated Show resolved Hide resolved
charts/nextcloud/templates/notify_push/deployment.yaml Outdated Show resolved Hide resolved
@wrenix
Copy link
Collaborator Author

wrenix commented Jun 18, 2024

Oh sorry, that was a copy-paste error.
normally i has on my helm-charts a global.image part to overwrite for registry and so on.

@wrenix wrenix force-pushed the feat/notify_push branch from 6acfe33 to 84009ac Compare June 18, 2024 13:43
@AndreKoepke
Copy link

AndreKoepke commented Jun 18, 2024

I was able to try an install. The result was this:

Configuring Redis as session handler
=> Searching for scripts (*.sh) to run, located in the folder: /docker-entrypoint-hooks.d/before-starting
==> Running the script (cwd: /var/www/html): "/docker-entrypoint-hooks.d/before-starting/notify_push.sh"
notify_push already installed
✓ redis is configured
🗴 push server is not receiving redis messages (received 272721789, got 0)
==> Failed at executing "/docker-entrypoint-hooks.d/before-starting/notify_push.sh". Exit code: 1

Edit

I have a password for redis and it was not set. Can add this like this?

            - name: REDIS_URL
              value: "redis://:<PASSWORD>@{{ template "nextcloud.redis.fullname" . }}-master:{{ .Values.redis.master.service.ports.redis }}"

When I did this locally, then we have the chicken-egg-problem ...
The notify_push application needs a running nextcloud-instance to fully start. And the nextcloud-instance need a running notify_push.

Maybe there is a better hook after nextcloud has started?

@wrenix wrenix force-pushed the feat/notify_push branch from 7b358ca to cc7051d Compare June 18, 2024 18:37
@AndreKoepke
Copy link

With the fixed port, I still unable to run it.

Logs from notify_push pod:

[2024-06-19 06:44:36.746890 +00:00] ERROR [notify_push] src/main.rs:78: Self test failed: Error while communicating with nextcloud instance: error sending request for url (http://akops-nextcloud.nextcloud.svc.cluster.local:8080/index.php/apps/notify_push/test/version): error trying to connect: tcp connect error: Connection refused (os error 111)

@jessebot
Copy link
Collaborator

@wrenix I'm updated your push file to be .tpl instead of .gotmpl to match the rest of the tpl files. I may also pop in here and write a quick test so this gets tested in CI?

@wrenix wrenix force-pushed the feat/notify_push branch 6 times, most recently from 43ba133 to fc97749 Compare November 27, 2024 21:01
@wrenix wrenix force-pushed the feat/notify_push branch 3 times, most recently from b73428e to fa34027 Compare December 18, 2024 13:37
@wrenix wrenix marked this pull request as ready for review December 18, 2024 13:37
@wrenix
Copy link
Collaborator Author

wrenix commented Dec 18, 2024

I move the env handling back to the helper (and split it).
So we have nearly the same logic for database(_url) and redis_url for nextcloud and notify-push.

So it should be review ready (and merge ready).

I create an CHANGELOG.md for the Breaking Changes.

@wrenix wrenix force-pushed the feat/notify_push branch 4 times, most recently from 3e0e0ca to a6d5be4 Compare December 19, 2024 22:08
@wrenix wrenix changed the base branch from main to develop December 19, 2024 22:26
@wrenix wrenix force-pushed the develop branch 3 times, most recently from d5360ea to da98433 Compare December 19, 2024 22:36
@wrenix wrenix changed the base branch from develop to main December 19, 2024 22:49
@wrenix wrenix requested review from provokateurin and removed request for Sn3akyF0x January 2, 2025 20:00
Copy link
Member

@provokateurin provokateurin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks mostly good to me, but I have some reservations.

You should also add some documentation to the readme and update the values tables.

@jessebot can you also take a look?

charts/nextcloud/CHANGELOG.md Outdated Show resolved Hide resolved
charts/nextcloud/CHANGELOG.md Outdated Show resolved Hide resolved
@@ -0,0 +1,4 @@
#!/bin/sh
/var/www/html/occ app:install notify_push
/var/www/html/occ config:app:set notify_push base_endpoint --value="https://{{ .Values.nextcloud.host }}{{ .Values.notifyPush.ingress.path }}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded to https? This seems wrong to me.
Also accessing it through the external host shouldn't be necessary and wouldn't work if the port is different.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure, but is this url not used by the nextcloud client? so a bent to localhost looks strange for me.

(i use the ingress.tls parameter to check if it is set ...)

Comment on lines 705 to 706
# -- image of notify_push (there is no official image yet: https://github.com/nextcloud/notify_push/issues/106)
repository: miles170/notify_push
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't feel good to me, anything that is not at least semi-official (like the nextcloud docker image) is a risky dependency to add.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand you, and i would prefer to change that.
For the current state:

i find that current solution okay (not all images are from nextcloud company, e.g. nextcloud-exporter for prometheus).

Maybe somebody from nextcloud could internal request for a official container ala nextcloud/notify_push#106

Or you could try the aio container: https://hub.docker.com/r/nextcloud/aio-notify-push/tags (which use a other container then notify-push itself )

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you try the AIO container? I'd be more comfortable with that, but if it doesn't work we can use this image for now.

Copy link
Collaborator Author

@wrenix wrenix Jan 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this image has an strange behavour:
https://github.com/nextcloud/all-in-one/blob/main/Containers/notify-push/Dockerfile + https://github.com/nextcloud/all-in-one/blob/main/Containers/notify-push/start.sh

It runs on /nextcloud data from another container with path:

/nextcloud/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push

It does not contain the notify_push binary (just shell scripts) ...
and a own / independent environment variable management.

@wrenix wrenix requested a review from provokateurin January 4, 2025 19:33
@@ -0,0 +1,4 @@
#!/bin/sh
/var/www/html/occ app:install notify_push
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/var/www/html/occ app:install notify_push
/var/www/html/occ app:enable notify_push

This will both install and enable the app. I'd expect that the app is automatically enabled, if it was disabled but installed previously.

Comment on lines +3 to +4
/var/www/html/occ config:app:set notify_push base_endpoint --value="http{{ if .Values.ingress.tls }}s{{ end }}://{{ .Values.nextcloud.host }}{{ .Values.notifyPush.ingress.path }}"
# /var/www/html/occ notify_push:setup "http{{ if .Values.ingress.tls }}s{{ end }}://{{ .Values.nextcloud.host }}{{ .Values.notifyPush.ingress.path }}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this commented out?
Does the command not work due to startup order creating a circular dependency?
Either way I don't think a commented out command is helpful, so please remove one of them.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it is a startup circular dependency.
Should I write a comment instatt of removing it?
(So that other person would not change that could to use notify_push:setup)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes please

ports:
- name: metrics
port: 9205
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is the port changed? This could be an unintended and unnecessary breaking change for some setups.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?:
The service port is independent of the pod port. I make it equal to the new notify_push port.
I choose 9100 to be equal with the node-exporter the most famous exporter. So more or less the default port of exporters ...

Breaking Change:
I do not know if it is really one. Prometheus access it on name and technical aspect like networkpolicy just look for pod-ports ... But yes, if any unknown service outside of that helm-chart use that service it is one.

For me, it does not matter which port I use here, so two option in announce Changelog or roll it back.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok fine, just add it to the changelog to avoid surprises.

Comment on lines +50 to +52
{{- with .Values.notifyPush.redisURLEnv }}
- name: "REDIS_URL"
{{- toYaml . | nindent 14 }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit ugly, a generic option like we already have for the server deployment would be nicer:

extraEnv:
# - name: SOME_SECRET_ENV
# valueFrom:
# secretKeyRef:
# name: nextcloud
# key: secret_key

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm okay, I need to change the logic and would drop the fail check if something is set for redis.

Comment on lines +86 to +88
# test the helm chart with notify push enabled
- name: Notify Push Enabled
helm_args: '--helm-extra-set-args "--values charts/nextcloud/test-values/notify_push.yaml"'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we only test that the deployment succeeds, could we use the notify_push self-test check (or whatever it is called) to ensure it works correctly?
Or would that already be covered automatically because the deployments won't succeed otherwise?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I make some thoughts therefore.
(No there is no self-test at this moment)

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

Successfully merging this pull request may close these issues.

[Feature] High Performance File Backend
5 participants