Compare commits

..

25 Commits

Author SHA1 Message Date
aa8cb40c34 meta: bump galaxy version to 0.8.0, require 'community.docker@^4.0.0' 2025-04-02 22:03:13 +02:00
18389388ab update(nginx): bump version to 1.27.4 2025-03-22 11:04:46 +01:00
e76cf67277 update(server): bump version to 31.0.1 2025-03-19 18:42:27 +01:00
8764acb3c3 update(server): bump version to 31.0.1 2025-03-15 19:04:07 +01:00
87d7e8285f update(nextcloud): bump version to 31.0.0 2025-02-25 18:11:48 +01:00
eea141b844 update(nextcloud): bump version to 30.0.6 2025-02-21 16:48:06 +01:00
4969faeb70 meta: bump galaxy version to 0.7.3 2025-01-30 15:38:28 +01:00
00fa76be14 update(nginx_fpm_proxy): bump nginx version to 1.27.3 2025-01-30 15:37:37 +01:00
23f70c9f26 update(server): bump version to 30.0.5 2025-01-20 21:09:35 +01:00
4f7cd41d72 update(server): bump version to 30.0.4 2024-12-22 20:18:40 +01:00
bb0e1f3ad5 meta: bump collection version to 0.7.2 2024-11-30 19:31:50 +01:00
12ac351254 chore(server): 'purge_networks' option for 'docker_container' module is removed 2024-11-30 19:29:26 +01:00
dbb6fe15ce chore(server): support setting /etc/hosts in container 2024-11-26 20:19:20 +01:00
3616ad5f45 update(server): bump version to 30.0.2 2024-11-25 21:46:16 +01:00
0a3b32c823 fix(server): use correct jinja2 tags 2024-11-02 12:08:08 +01:00
e2e8d84c13 chore(nginx_fpm_proxy): provide defaults for not defined variables 2024-10-26 19:01:08 +02:00
6027db3f5f update(server): bump version to 30.0.1 2024-10-23 20:46:49 +02:00
8eae295b83 meta: add tags to collection 2024-10-05 10:30:04 +02:00
f759064c1e meta: bump collection version to 0.7.1 2024-10-04 19:52:29 +02:00
38246ea585 meta: add role metadata 2024-10-04 19:51:33 +02:00
ff312f8214 meta(server): add role metadata 2024-10-04 19:44:33 +02:00
31f326016b chore(server): retry configure during nextcloud restart 2024-10-04 19:44:28 +02:00
6640ba726e chore(server): split container image into parts 2024-10-04 19:44:22 +02:00
4a67f38f11 meta: bump collection to 0.7.0 2024-10-02 20:58:52 +02:00
23301a0a86 feat(oidc_user_backend): add ansible role 2024-09-29 22:18:55 +02:00
23 changed files with 354 additions and 166 deletions

View File

@ -15,6 +15,8 @@ and managing nextcloud installations
server instance. Can install, remove, enable/disable and update apps. server instance. Can install, remove, enable/disable and update apps.
- [`ldap_user_backend`](roles/ldap_user_backend/README.md): - [`ldap_user_backend`](roles/ldap_user_backend/README.md):
Manages LDAP authentication sources in installed nextcloud instances. Manages LDAP authentication sources in installed nextcloud instances.
- [`oidc_user_backend`](roles/oidc_user_backend/README.md):
Manage OIDC authentication sources in installed nextcloud instances.
- [`nginx_fpm_proxy`](roles/nginx_fpm_proxy/README.md): - [`nginx_fpm_proxy`](roles/nginx_fpm_proxy/README.md):
Reverse proxy role which connects to nextcloud using FPM Reverse proxy role which connects to nextcloud using FPM
and serves static content. and serves static content.

View File

@ -1,14 +1,18 @@
namespace: finallycoffee namespace: finallycoffee
name: nextcloud name: nextcloud
version: 0.6.1 version: "0.8.0"
readme: README.md readme: README.md
authors: authors:
- transcaffeine <transcaffeine@finally.coffee> - transcaffeine <transcaffeine@finally.coffee>
description: Installing and configuring nextcloud (and related apps/services) using docker description: Installing and configuring nextcloud (and related apps/services) using docker
dependencies: dependencies:
"community.docker": "^3.0.0" "community.docker": "^4.0.0"
license_file: LICENSE.md license_file: LICENSE.md
build_ignore: build_ignore:
- '*.tar.gz' - '*.tar.gz'
repository: https://git.finally.coffee/finallycoffee/nextcloud repository: https://git.finally.coffee/finallycoffee/nextcloud
issues: https://codeberg.org/finallycoffee/ansible-collection-nextcloud/issues issues: https://codeberg.org/finallycoffee/ansible-collection-nextcloud/issues
tags:
- nextcloud
- nextcloud_apps
- docker

12
roles/apps/meta/main.yml Normal file
View File

@ -0,0 +1,12 @@
---
allow_duplicates: true
dependencies: []
galaxy_info:
role_name: apps
description: Install Nextcloud apps using ansible
galaxy_tags:
- nextcloud
- owncloud
- apps
- nextcloud-apps
- docker

View File

@ -1,4 +1,12 @@
--- ---
allow_duplicates: true
collections: dependencies: []
- community.docker galaxy_info:
role_name: ldap_user_backend
description: Configure a nextcloud ldap user backend using ansible
galaxy_tags:
- nextcloud
- owncloud
- ldap
- authentication
- docker

View File

@ -1,6 +1,5 @@
--- ---
nextcloud_nginx_version: "1.27.4"
nextcloud_nginx_version: "1.25.3"
nextcloud_nginx_basepath: /opt/nextcloud-nginx nextcloud_nginx_basepath: /opt/nextcloud-nginx
nextcloud_nginx_config: "{{ nextcloud_nginx_basepath }}/nextcloud.conf" nextcloud_nginx_config: "{{ nextcloud_nginx_basepath }}/nextcloud.conf"
nextcloud_nginx_servernames: ~ nextcloud_nginx_servernames: ~

View File

@ -0,0 +1,12 @@
---
allow_duplicates: true
dependencies: []
galaxy_info:
role_name: nginx_fpm_proxy
description: Configure nginx as a FPM proxy for nextcloud
galaxy_tags:
- nextcloud
- owncloud
- nginx
- fpm
- docker

View File

@ -29,9 +29,9 @@
env: "{{ nextcloud_nginx_container_env }}" env: "{{ nextcloud_nginx_container_env }}"
name: "{{ nextcloud_nginx_container_name }}" name: "{{ nextcloud_nginx_container_name }}"
image: "{{ nextcloud_nginx_container_image_ref }}" image: "{{ nextcloud_nginx_container_image_ref }}"
ports: "{{ nextcloud_nginx_container_ports }}" ports: "{{ nextcloud_nginx_container_ports | default(omit, true) }}"
volumes: "{{ nextcloud_nginx_container_volumes }}" volumes: "{{ nextcloud_nginx_container_volumes }}"
labels: "{{ nextcloud_nginx_container_labels }}" labels: "{{ nextcloud_nginx_container_labels | default(omit, true) }}"
networks: "{{ nextcloud_nginx_container_networks | default(omit) }}" networks: "{{ nextcloud_nginx_container_networks | default(omit, true) }}"
restart_policy: "{{ nextcloud_nginx_container_restart_policy }}" restart_policy: "{{ nextcloud_nginx_container_restart_policy }}"
state: started state: started

View File

@ -4,26 +4,23 @@ Configure OIDC user backends in nextcloud using this ansible role.
This role can be run multiple times with different arguments in order to This role can be run multiple times with different arguments in order to
configure multiple oidc-based user backends. configure multiple oidc-based user backends.
> [!WARNING]
> This role is not production ready or finished
## Configuration ## Configuration
Set `oidc_user_occ_user_oidc_provider_identifier` to a unique identifier. Set `oidc_user_backend_provider_identifier` to a unique identifier.
Populate your provider information in the `oidc_user_config_(settings_)` Populate your provider information in the `oidc_user_backend_config_provider_provider_(settings_)`
like this: like this:
```yaml ```yaml
oidc_user_config_identifier: my_provider oidc_user_backend_config_provider_identifier: my_provider
oidc_user_config_discovery_endpoint: https://idp.example.com/ oidc_user_backend_config_provider_discovery_endpoint: https://idp.example.com/
oidc_user_config_client_id: my-client-id oidc_user_backend_config_provider_client_id: my-client-id
oidc_user_config_client_secret: my-client-secret oidc_user_backend_config_provider_client_secret: my-client-secret
# All options to the occ command are avaible in the # All options to the occ command are avaible in the
# `oidc_user_config_settings_` namespace # `oidc_user_backend_config_provider_settings_` namespace
oidc_user_config_settings_unique_id: true oidc_user_backend_config_provider_settings_unique_id: true
oidc_user_config_settings_send_id_token_hint: true oidc_user_backend_config_provider_settings_send_id_token_hint: true
oidc_user_config_settings_mapping_display_name: name oidc_user_backend_config_provider_settings_mapping_display_name: name
oidc_user_config_settings_mapping_uid: preferred_username oidc_user_backend_config_provider_settings_mapping_uid: preferred_username
oidc_user_config_settings_mapping_email: email oidc_user_backend_config_provider_settings_mapping_email: email
``` ```

View File

@ -1,47 +0,0 @@
---
oidc_user_deployment_method: host
oidc_user_deployment_become_user: ~
oidc_user_deployment_method_docker_container_name: nextcloud
oidc_user_deployment_method_podman_container_name: nextcloud
oidc_user_occ_command: "php occ"
oidc_user_occ_user_oidc_provider_identifier: ~
oidc_user_config_identifier: ~
oidc_user_config_client_id: ~
oidc_user_config_client_secret: ~
oidc_user_config_discovery_endpoint: ~
oidc_user_config_end_session_endpoint: ~
oidc_user_config_scopes:
- openid
- email
- profile
oidc_user_config_settings_unique_id: true
oidc_user_config_settings_check_bearer: true
oidc_user_config_settings_send_id_token_hint: true
oidc_user_config_settings_bearer_provisioning: false
oidc_user_config_settings_extra_claims: []
oidc_user_config_settings_provider_based_id: false
oidc_user_config_settings_group_provisioning: false
oidc_user_config_settings_mapping_display_name: name
oidc_user_config_settings_mapping_email: email
oidc_user_config_settings_mapping_quota: ~
oidc_user_config_settings_mapping_uid: sub
oidc_user_config_settings_mapping_groups: ~
oidc_user_config_settings_mapping_address: ~
oidc_user_config_settings_mapping_street_address: ~
oidc_user_config_settings_mapping_postal_code: ~
oidc_user_config_settings_mapping_locality: ~
oidc_user_config_settings_mapping_region: ~
oidc_user_config_settings_mapping_country: ~
oidc_user_config_settings_mapping_website: ~
oidc_user_config_settings_mapping_avatar: ~
oidc_user_config_settings_mapping_twitter: ~
oidc_user_config_settings_mapping_fediverse: ~
oidc_user_config_settings_mapping_organisation: ~
oidc_user_config_settings_mapping_role: ~
oidc_user_config_settings_mapping_headline: ~
oidc_user_config_settings_mapping_biography: ~
oidc_user_config_settings_mapping_phone: ~
oidc_user_config_settings_mapping_gender: ~

View File

@ -0,0 +1,40 @@
---
oidc_user_backend_config_provider_identifier: ~
oidc_user_backend_config_provider_client_id: ~
oidc_user_backend_config_provider_client_secret: ~
oidc_user_backend_config_provider_discovery_endpoint: ~
oidc_user_backend_config_provider_end_session_endpoint: ~
oidc_user_backend_config_provider_scopes:
- openid
- email
- profile
oidc_user_backend_config_provider_settings_unique_uid: true
oidc_user_backend_config_provider_settings_check_bearer: true
oidc_user_backend_config_provider_settings_send_id_token_hint: true
oidc_user_backend_config_provider_settings_bearer_provisioning: false
oidc_user_backend_config_provider_settings_extra_claims: []
oidc_user_backend_config_provider_settings_provider_based_id: false
oidc_user_backend_config_provider_settings_group_provisioning: false
oidc_user_backend_config_provider_settings_mapping_display_name: name
oidc_user_backend_config_provider_settings_mapping_email: email
oidc_user_backend_config_provider_settings_mapping_quota: ~
oidc_user_backend_config_provider_settings_mapping_uid: sub
oidc_user_backend_config_provider_settings_mapping_groups: ~
oidc_user_backend_config_provider_settings_mapping_address: ~
oidc_user_backend_config_provider_settings_mapping_street_address: ~
oidc_user_backend_config_provider_settings_mapping_postal_code: ~
oidc_user_backend_config_provider_settings_mapping_locality: ~
oidc_user_backend_config_provider_settings_mapping_region: ~
oidc_user_backend_config_provider_settings_mapping_country: ~
oidc_user_backend_config_provider_settings_mapping_website: ~
oidc_user_backend_config_provider_settings_mapping_avatar: ~
oidc_user_backend_config_provider_settings_mapping_twitter: ~
oidc_user_backend_config_provider_settings_mapping_fediverse: ~
oidc_user_backend_config_provider_settings_mapping_organisation: ~
oidc_user_backend_config_provider_settings_mapping_role: ~
oidc_user_backend_config_provider_settings_mapping_headline: ~
oidc_user_backend_config_provider_settings_mapping_biography: ~
oidc_user_backend_config_provider_settings_mapping_phone: ~
oidc_user_backend_config_provider_settings_mapping_gender: ~

View File

@ -0,0 +1,5 @@
---
oidc_user_backend_deployment_method: host
oidc_user_backend_deployment_become_user: ~
oidc_user_backend_deployment_method_docker_container_name: nextcloud
oidc_user_backend_deployment_method_podman_container_name: nextcloud

View File

@ -0,0 +1,15 @@
---
oidc_user_backend_occ_command: "php occ"
oidc_user_backend_occ_user_oidc_provider_identifier: >-2
{{ oidc_user_backend_config_provider_identifier }}
oidc_user_backend_force_update: false
oidc_user_backend_occ_user_oidc_provider_set_command: >-2
{{ oidc_user_backend_occ_command }} user_oidc:provider
{{ oidc_user_backend_occ_user_oidc_provider_options }}
{{ oidc_user_backend_occ_user_oidc_provider_identifier }}
oidc_user_backend_occ_user_oidc_provider_list_command: >-2
{{ oidc_user_backend_occ_command }} user_oidc:provider --output=json
oidc_user_backend_occ_user_oidc_provider_get_command: >-2
{{ oidc_user_backend_occ_command }} user_oidc:provider --output=json
{{ oidc_user_backend_occ_user_oidc_provider_identifier }}

View File

@ -0,0 +1,12 @@
---
allow_duplicates: true
dependencies: []
galaxy_info:
role_name: oidc_user_backend
description: Configure a nextcloud oidc user backend using ansible
galaxy_tags:
- nextcloud
- owncloud
- oidc
- authentication
- docker

View File

@ -0,0 +1,41 @@
---
- name: Execute OCC command (host)
ansible.builtin.command:
cmd: "{{ oidc_user_backend_occ_command_to_exec }}"
become_user: "{{ oidc_user_backend_occ_user_to_become }}"
register: oidc_user_backend_occ_command_result_host
when: oidc_user_backend_deployment_method == 'host'
- name: Execute OCC command (docker)
community.docker.docker_container_exec:
container: >-2
{{ oidc_user_backend_deployment_method_docker_container_name }}
command: "{{ oidc_user_backend_occ_command_to_exec }}"
user: "{{ oidc_user_backend_occ_user_to_become | default(omit, true) }}"
register: oidc_user_backend_occ_command_result_docker
when: oidc_user_backend_deployment_method == 'docker'
- name: Execute OCC command (podman)
containers.podman.podman_container_exec:
name: >-2
{{ oidc_user_backend_deployment_method_podman_container_name }}
command: "{{ oidc_user_backend_occ_command_to_exec }}"
user: "{{ oidc_user_backend_occ_user_to_become | default(omit, true) }}"
register: oidc_user_backend_occ_command_result_podman
when: oidc_user_backend_deployment_method == 'podman'
- name: Register result into variable
ansible.builtin.set_fact: {
"{{ oidc_user_backend_occ_command_result_var }}" : "{{
oidc_user_backend_occ_command_result.stdout | string | from_json
}}"
}
vars:
oidc_user_backend_occ_result_map:
host: "{{ oidc_user_backend_occ_command_result_host }}"
docker: "{{ oidc_user_backend_occ_command_result_docker }}"
podman: "{{ oidc_user_backend_occ_command_result_podman }}"
oidc_user_backend_occ_command_result: >-2
{{ oidc_user_backend_occ_result_map[oidc_user_backend_deployment_method]
| default(false, true) }}
when: oidc_user_backend_occ_command_result_var | default(false, true)

View File

@ -1,29 +1,52 @@
--- ---
- name: Check if deployment method is supported - name: Check if deployment method is supported
ansible.builtin.fail: ansible.builtin.fail:
msg: >-2 msg: >-2
Deployment method '{{ oidc_user_deployment_method }}' is not supported! Deployment method '{{ oidc_user_backend_deployment_method }}' is not supported!
Supported are: {{ oidc_user_deployment_methods | join(', ') }} Supported are: {{ oidc_user_backend_deployment_methods | join(', ') }}
when: oidc_user_deployment_method not in oidc_user_deployment_methods when: oidc_user_backend_deployment_method not in oidc_user_backend_deployment_methods
- name: Configure OIDC provider - name: Lookup become user info
ansible.builtin.command: ansible.builtin.user:
cmd: "{{ oidc_user_occ_user_oidc_provider_set_command }}" name: "{{ oidc_user_backend_deployment_become_user }}"
become_user: "{{ oidc_user_deployment_become_user }}" state: present
become: "{{ oidc_user_deployment_become_user | default(false, true) }}" check_mode: true
when: oidc_user_deployment_method == 'host' register: oidc_user_backend_deployment_become_user_info
when: oidc_user_backend_deployment_become_user | default(false, true)
- name: Configure OIDC provider (docker) - name: Retrieve configured providers
community.docker.docker_container_exec: ansible.builtin.include_tasks:
container: "{{ oidc_user_deployment_method_docker_container_name }}" file: execute-occ.yml
command: "{{ oidc_user_occ_user_oidc_provider_set_command }}" vars:
user: "{{ oidc_user_deployment_become_user | default(omit, true) }}" oidc_user_backend_occ_command_to_exec: >-
when: oidc_user_deployment_method == 'docker' {{ oidc_user_backend_occ_user_oidc_provider_get_command }}
oidc_user_backend_occ_user_to_become: "{{ oidc_user_backend_deployment_become_user_info.uid }}"
oidc_user_backend_occ_command_result_var: "oidc_user_backend_occ_user_oidc_provider"
- name: Configure OIDC provider (podman) - name: Check if provider information should be updated
containers.podman.podman_container_exec: set_fact:
name: "{{ oidc_user_deployment_method_podman_container_name }}" oidc_user_backend_backend_force_update: true
command: "{{ oidc_user_occ_user_oidc_provider_set_command }}" loop: "{{ lookup('ansible.utils.to_paths', oidc_user_backend_occ_user_oidc_provider) | dict2items }}"
user: "{{ oidc_user_deployment_become_user | default(omit, true) }}" loop_control:
when: oidc_user_deployment_method == 'podman' label: "{{ item.key }}"
vars:
target_config: >-2
{{ lookup('ansible.utils.to_paths', oidc_user_backend_occ_user_oidc_config_provider_dict) }}
when:
- item.key not in oidc_user_backend_occ_user_oidc_provider_ignored_settings
- (item.value != None) and (target_config[item.key] != None)
- >-2
(target_config[item.key] != None) | ternary(
(item.value != target_config[item.key]),
(item.value | string | length > 0)
)
- name: Update configuration for provider '{{ oidc_user_backend_config_provider_identifier }}'
ansible.builtin.include_tasks:
file: execute-occ.yml
vars:
oidc_user_backend_occ_command_to_exec: >-
{{ oidc_user_backend_occ_user_oidc_provider_set_command }}
oidc_user_backend_occ_user_to_become: "{{ oidc_user_backend_deployment_become_user_info.uid }}"
oidc_user_backend_occ_command_result_var: ~
when: oidc_user_backend_backend_force_update | default(false, true)

View File

@ -1,63 +0,0 @@
---
oidc_user_deployment_methods:
- host
- docker
- podman
oidc_user_occ_user_oidc_options_dict:
clientid: "{{ oidc_user_config_client_id }}"
clientsecret: "{{ oidc_user_config_client_secret }}"
discoveryuri: "{{ oidc_user_config_discovery_endpoint }}"
endsessionendpointuri: "{{ oidc_user_config_end_session_endpoint }}"
scope: "'{{ oidc_user_config_scopes | default([], true) | join(' ') }}'"
"unique-uid": >-2
{{ oidc_user_config_settings_unique_id | bool | ternary(1, 0) }}
"check-bearer": >-2
{{ oidc_user_config_settings_check_bearer | bool | ternary(1, 0) }}
"send-id-token-hint": >-2
{{ oidc_user_config_settings_send_id_token_hint | bool | ternary(1, 0) }}
"group-provisioning": >-2
{{ oidc_user_config_settings_group_provisioning | bool | ternary(1, 0) }}
"extra-claims": >-2
{{ (oidc_user_config_settings_extra_claims | default([]) | length > 0)
| ternary(oidc_user_config_settings_extra_claims | join(' ') | quote, '') }}
oidc_user_occ_user_oidc_mapping_options_dict:
"display-name": "{{ oidc_user_config_settings_mapping_display_name }}"
email: "{{ oidc_user_config_settings_mapping_email }}"
quota: "{{ oidc_user_config_settings_mapping_quota }}"
uid: "{{ oidc_user_config_settings_mapping_uid }}"
groups: "{{ oidc_user_config_settings_mapping_groups }}"
website: "{{ oidc_user_config_settings_mapping_website }}"
avatar: "{{ oidc_user_config_settings_mapping_avatar }}"
twitter: "{{ oidc_user_config_settings_mapping_twitter }}"
fediverse: "{{ oidc_user_config_settings_mapping_fediverse }}"
organisation: "{{ oidc_user_config_settings_mapping_organisation }}"
role: "{{ oidc_user_config_settings_mapping_role }}"
headline: "{{ oidc_user_config_settings_mapping_headline }}"
biography: "{{ oidc_user_config_settings_mapping_biography }}"
phone: "{{ oidc_user_config_settings_mapping_phone }}"
gender: "{{ oidc_user_config_settings_mapping_gender }}"
address: "{{ oidc_user_config_settings_mapping_address }}"
street_address: "{{ oidc_user_config_settings_mapping_street_address }}"
postal_code: "{{ oidc_user_config_settings_mapping_postal_code }}"
locality: "{{ oidc_user_config_settings_mapping_locality }}"
region: "{{ oidc_user_config_settings_mapping_region }}"
country: "{{ oidc_user_config_settings_mapping_country }}"
oidc_user_occ_user_oidc_provider_options: >-2
{% for tuple in oidc_user_occ_user_oidc_options_dict | dict2items %}
{% if tuple.value | default(false, true) %}
--{{ tuple.key }}={{ tuple.value }}
{% endif %}
{% endfor %}
{% for tuple in oidc_user_occ_user_oidc_mapping_options_dict | dict2items %}
{% if tuple.value | default(false, true) %}
--mapping-{{ tuple.key }}={{ tuple.value }}
{% endif %}
{% endfor %}
oidc_user_occ_user_oidc_provider_set_command: >-2
{{ oidc_user_occ_command }} user_oidc:provider
{{ oidc_user_occ_user_oidc_provider_options }}
{{ oidc_user_occ_user_oidc_provider_identifier }}

View File

@ -0,0 +1,9 @@
---
oidc_user_backend_deployment_methods:
- host
- docker
- podman
oidc_user_backend_occ_user_oidc_provider_ignored_settings:
- 'id'
- 'settings.bearerProvisioning'

View File

@ -0,0 +1,43 @@
---
# JSON structure of the `occ` response with `--output=json`
oidc_user_backend_occ_user_oidc_config_provider_dict:
identifier: "{{ oidc_user_backend_config_provider_identifier }}"
clientId: "{{ oidc_user_backend_config_provider_client_id }}"
clientSecret: "{{ oidc_user_backend_config_provider_client_secret }}"
discoveryEndpoint: "{{ oidc_user_backend_config_provider_discovery_endpoint }}"
endSessionEndpoint: "{{ oidc_user_backend_config_provider_end_session_endpoint }}"
scope: "{{ oidc_user_backend_config_provider_scopes | default([], true) | join(' ') }}"
settings:
uniqueUid: >-2
{{ oidc_user_backend_config_provider_settings_unique_uid | bool }}
providerBasedId: >-2
{{ oidc_user_backend_config_provider_settings_provider_based_id | bool }}
checkBearer: >-2
{{ oidc_user_backend_config_provider_settings_check_bearer | bool }}
sendIdTokenHint: >-2
{{ oidc_user_backend_config_provider_settings_send_id_token_hint | bool }}
groupProvisioning: >-2
{{ oidc_user_backend_config_provider_settings_group_provisioning | bool }}
extraClaims: >-2
{{ oidc_user_backend_config_provider_settings_extra_claims | default([]) | join(' ') }}
mappingDisplayName: "{{ oidc_user_backend_config_provider_settings_mapping_display_name }}"
mappingEmail: "{{ oidc_user_backend_config_provider_settings_mapping_email }}"
mappingQuota: "{{ oidc_user_backend_config_provider_settings_mapping_quota }}"
mappingUid: "{{ oidc_user_backend_config_provider_settings_mapping_uid }}"
mappingGroups: "{{ oidc_user_backend_config_provider_settings_mapping_groups }}"
mappingWebsite: "{{ oidc_user_backend_config_provider_settings_mapping_website }}"
mappingAvatar: "{{ oidc_user_backend_config_provider_settings_mapping_avatar }}"
mappingTwitter: "{{ oidc_user_backend_config_provider_settings_mapping_twitter }}"
mappingFediverse: "{{ oidc_user_backend_config_provider_settings_mapping_fediverse }}"
mappingOrganisation: "{{ oidc_user_backend_config_provider_settings_mapping_organisation }}"
mappingRole: "{{ oidc_user_backend_config_provider_settings_mapping_role }}"
mappingHeadline: "{{ oidc_user_backend_config_provider_settings_mapping_headline }}"
mappingBiography: "{{ oidc_user_backend_config_provider_settings_mapping_biography }}"
mappingPhonenumber: "{{ oidc_user_backend_config_provider_settings_mapping_phone }}"
mappingGender: "{{ oidc_user_backend_config_provider_settings_mapping_gender }}"
mappingAddress: "{{ oidc_user_backend_config_provider_settings_mapping_address }}"
mappingStreetaddress: "{{ oidc_user_backend_config_provider_settings_mapping_street_address }}"
mappingPostalcode: "{{ oidc_user_backend_config_provider_settings_mapping_postal_code }}"
mappingLocality: "{{ oidc_user_backend_config_provider_settings_mapping_locality }}"
mappingRegion: "{{ oidc_user_backend_config_provider_settings_mapping_region }}"
mappingCountry: "{{ oidc_user_backend_config_provider_settings_mapping_country }}"

View File

@ -0,0 +1,54 @@
---
# Structure how `occ user_oidc:provider [options] [<identifier>]` expects them
oidc_user_backend_occ_user_oidc_provider_options_dict:
clientid: "{{ oidc_user_backend_config_provider_client_id }}"
clientsecret: "{{ oidc_user_backend_config_provider_client_secret }}"
discoveryuri: "{{ oidc_user_backend_config_provider_discovery_endpoint }}"
endsessionendpointuri: "{{ oidc_user_backend_config_provider_end_session_endpoint }}"
scope: "'{{ oidc_user_backend_config_provider_scopes | default([], true) | join(' ') }}'"
"unique-uid": >-2
{{ oidc_user_backend_config_provider_settings_unique_uid | bool | ternary(1, 0) }}
"check-bearer": >-2
{{ oidc_user_backend_config_provider_settings_check_bearer | bool | ternary(1, 0) }}
"send-id-token-hint": >-2
{{ oidc_user_backend_config_provider_settings_send_id_token_hint | bool | ternary(1, 0) }}
"group-provisioning": >-2
{{ oidc_user_backend_config_provider_settings_group_provisioning | bool | ternary(1, 0) }}
"extra-claims": >-2
{{ (oidc_user_backend_config_provider_settings_extra_claims | default([]) | length > 0)
| ternary(oidc_user_backend_config_provider_settings_extra_claims | join(' ') | quote, '') }}
oidc_user_backend_occ_user_oidc_provider_mapping_options_dict:
"display-name": "{{ oidc_user_backend_config_provider_settings_mapping_display_name }}"
email: "{{ oidc_user_backend_config_provider_settings_mapping_email }}"
quota: "{{ oidc_user_backend_config_provider_settings_mapping_quota }}"
uid: "{{ oidc_user_backend_config_provider_settings_mapping_uid }}"
groups: "{{ oidc_user_backend_config_provider_settings_mapping_groups }}"
website: "{{ oidc_user_backend_config_provider_settings_mapping_website }}"
avatar: "{{ oidc_user_backend_config_provider_settings_mapping_avatar }}"
twitter: "{{ oidc_user_backend_config_provider_settings_mapping_twitter }}"
fediverse: "{{ oidc_user_backend_config_provider_settings_mapping_fediverse }}"
organisation: "{{ oidc_user_backend_config_provider_settings_mapping_organisation }}"
role: "{{ oidc_user_backend_config_provider_settings_mapping_role }}"
headline: "{{ oidc_user_backend_config_provider_settings_mapping_headline }}"
biography: "{{ oidc_user_backend_config_provider_settings_mapping_biography }}"
phone: "{{ oidc_user_backend_config_provider_settings_mapping_phone }}"
gender: "{{ oidc_user_backend_config_provider_settings_mapping_gender }}"
address: "{{ oidc_user_backend_config_provider_settings_mapping_address }}"
street_address: "{{ oidc_user_backend_config_provider_settings_mapping_street_address }}"
postal_code: "{{ oidc_user_backend_config_provider_settings_mapping_postal_code }}"
locality: "{{ oidc_user_backend_config_provider_settings_mapping_locality }}"
region: "{{ oidc_user_backend_config_provider_settings_mapping_region }}"
country: "{{ oidc_user_backend_config_provider_settings_mapping_country }}"
oidc_user_backend_occ_user_oidc_provider_options: >-2
{% for tuple in oidc_user_backend_occ_user_oidc_provider_options_dict | dict2items %}
{% if tuple.value | default(false, true) %}
--{{ tuple.key }}={{ tuple.value }}
{% endif %}
{% endfor %}
{% for tuple in oidc_user_backend_occ_user_oidc_provider_mapping_options_dict | dict2items %}
{% if tuple.value | default(false, true) %}
--mapping-{{ tuple.key }}={{ tuple.value }}
{% endif %}
{% endfor %}

View File

@ -1,6 +1,5 @@
--- ---
nextcloud_version: "31.0.2"
nextcloud_version: 30.0.0
nextcloud_user: nextcloud nextcloud_user: nextcloud
nextcloud_basepath: /opt/nextcloud nextcloud_basepath: /opt/nextcloud
nextcloud_config_path: "{{ nextcloud_basepath }}/config" nextcloud_config_path: "{{ nextcloud_basepath }}/config"
@ -20,9 +19,20 @@ nextcloud_database_pass: ~
nextcloud_database_host: localhost nextcloud_database_host: localhost
nextcloud_container_name: nextcloud nextcloud_container_name: nextcloud
nextcloud_container_image: docker.io/library/nextcloud nextcloud_container_image_server: docker.io
nextcloud_container_image_namespace: library
nextcloud_container_image_name: nextcloud
nextcloud_container_image: >-2
{{
[
nextcloud_container_image_server,
nextcloud_container_image_namespace,
nextcloud_container_image_name,
] | join('/')
}}
nextcloud_container_image_variant: "-fpm-alpine" nextcloud_container_image_variant: "-fpm-alpine"
nextcloud_container_image_ref: "{{ nextcloud_container_name }}:{{ nextcloud_version }}{{ nextcloud_container_image_variant }}" nextcloud_container_image_ref: >-2
{{ nextcloud_container_image }}:{{ nextcloud_version }}{{ nextcloud_container_image_variant }}
nextcloud_container_image_force_source: false nextcloud_container_image_force_source: false
nextcloud_container_restart_policy: "unless-stopped" nextcloud_container_restart_policy: "unless-stopped"
@ -41,7 +51,6 @@ nextcloud_container_extra_labels: {}
nextcloud_container_extra_environment: {} nextcloud_container_extra_environment: {}
nextcloud_container_networks: ~ nextcloud_container_networks: ~
nextcloud_container_purge_other_networks: true
nextcloud_paths: nextcloud_paths:
- path: "{{ nextcloud_config_path }}" - path: "{{ nextcloud_config_path }}"

View File

@ -0,0 +1,10 @@
---
allow_duplicates: true
dependencies: []
galaxy_info:
role_name: server
description: Deploy nextcloud server, the self-hosted nextcloud
galaxy_tags:
- nextcloud
- owncloud
- docker

View File

@ -9,6 +9,9 @@
user: "{{ nextcloud_user_info.uid }}" user: "{{ nextcloud_user_info.uid }}"
tty: yes tty: yes
register: nextcloud_current_config_entry register: nextcloud_current_config_entry
until: nextcloud_current_config_entry is success
retries: 30
delay: 10
check_mode: false check_mode: false
changed_when: false changed_when: false
@ -25,9 +28,9 @@
value_type: >- value_type: >-
{% if value is boolean %} {% if value is boolean %}
boolean boolean
{% elsif value is integer %} {% elif value is integer %}
integer integer
{% elsif value is float %} {% elif value is float %}
float float
{% else %} {% else %}
string string

View File

@ -29,7 +29,7 @@
group: "{{ item.group }}" group: "{{ item.group }}"
loop: "{{ nextcloud_paths }}" loop: "{{ nextcloud_paths }}"
- name: Ensure docker container for nextcloud is pulled - name: Ensure docker container image '{{ nextcloud_container_image_ref }}' for nextcloud is pulled
community.docker.docker_image: community.docker.docker_image:
name: "{{ nextcloud_container_image_ref }}" name: "{{ nextcloud_container_image_ref }}"
state: present state: present
@ -118,8 +118,8 @@
volumes: "{{ nextcloud_container_volumes }}" volumes: "{{ nextcloud_container_volumes }}"
labels: "{{ nextcloud_container_labels }}" labels: "{{ nextcloud_container_labels }}"
env: "{{ nextcloud_container_env }}" env: "{{ nextcloud_container_env }}"
etc_hosts: "{{ nextcloud_container_etc_hosts | default(omit, true) }}"
networks: "{{ nextcloud_container_networks | default(omit, true) }}" networks: "{{ nextcloud_container_networks | default(omit, true) }}"
purge_networks: "{{ nextcloud_container_purge_other_networks }}"
restart_policy: "{{ nextcloud_container_restart_policy }}" restart_policy: "{{ nextcloud_container_restart_policy }}"
state: started state: started