mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
Add tests/lint/repository/test_task_file_numbering.py: numbered task files use exactly two leading digits, a numbered *_core.yml must be 00_core.yml, per directory the numbers are unique/consecutive and start at 01 (00 with a core file), numbered includes appear in ascending order, and shared helpers live in tasks/utils/ instead of the numbered chain. Apply it across every role: rename NN_core.yml to 00_core.yml with a consecutive down-shift of the siblings, move letter-suffix children into a subdirectory named after their parent task, relocate helpers included from more than one place into tasks/utils/, and update every reference (include_tasks, path_absolute, .ansible-lint-ignore, requirement docs). Legacy narration comments in the touched files are deleted; the upstream xwiki.properties reference block opts out via nocheck. The unused MAILU_IP6_PUBLIC var (only ever named in now-removed comments) is dropped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
127 lines
6.2 KiB
YAML
127 lines
6.2 KiB
YAML
---
|
|
# Configure Moodle's auth_ldap plugin. In variant 0 (hybrid) it runs
|
|
# in sync-only mode (login = auth_oidc); in variant 1 (LDAP-only) it
|
|
# is the primary login plugin. Field mapping is identical between
|
|
# variants.
|
|
|
|
- name: "▶️ Run Moodle DB upgrade for auth_ldap plugin"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/upgrade.php --non-interactive
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: "🔧 Configure auth_ldap connection + field mapping"
|
|
loop:
|
|
- { name: "host_url", value: "{{ LDAP.SERVER.URI }}" }
|
|
- { name: "ldap_version", value: 3 }
|
|
- { name: "start_tls", value: 0 }
|
|
- { name: "user_type", value: "rfc2307" }
|
|
- { name: "contexts", value: "{{ LDAP.DN.OU.USERS }}" }
|
|
- { name: "search_sub", value: 1 }
|
|
- { name: "user_attribute", value: "uid" }
|
|
- { name: "objectclass", value: "(objectClass=inetOrgPerson)" }
|
|
- { name: "memberattribute", value: "memberOf" }
|
|
- { name: "memberattribute_isdn", value: 1 }
|
|
- { name: "bind_dn", value: "{{ LDAP.DN.ADMINISTRATOR.DATA }}" }
|
|
- { name: "bind_pw", value: "{{ LDAP.BIND_CREDENTIAL }}" }
|
|
- { name: "creators", value: "*" }
|
|
- { name: "auth_user_create", value: "{{ MOODLE_OIDC_ENABLED | bool | ternary(0, 1) }}" }
|
|
- { name: "removeuser", value: 1 } # 1 = suspend (preserve history); 2 = delete
|
|
- { name: "sync_suspended", value: 1 }
|
|
- { name: "field_map_firstname", value: "givenName" }
|
|
- { name: "field_lock_firstname", value: "locked" }
|
|
- { name: "field_updatelocal_firstname", value: "oncreate" }
|
|
- { name: "field_map_lastname", value: "sn" }
|
|
- { name: "field_lock_lastname", value: "locked" }
|
|
- { name: "field_updatelocal_lastname", value: "oncreate" }
|
|
- { name: "field_map_middlename", value: "initials" }
|
|
- { name: "field_lock_middlename", value: "locked" }
|
|
- { name: "field_updatelocal_middlename", value: "oncreate" }
|
|
- { name: "field_map_alternatename", value: "displayName" }
|
|
- { name: "field_lock_alternatename", value: "locked" }
|
|
- { name: "field_updatelocal_alternatename", value: "oncreate" }
|
|
- { name: "field_map_email", value: "mail" }
|
|
- { name: "field_lock_email", value: "locked" }
|
|
- { name: "field_updatelocal_email", value: "oncreate" }
|
|
- { name: "field_map_phone1", value: "telephoneNumber" }
|
|
- { name: "field_lock_phone1", value: "locked" }
|
|
- { name: "field_updatelocal_phone1", value: "oncreate" }
|
|
- { name: "field_map_phone2", value: "mobile" }
|
|
- { name: "field_lock_phone2", value: "locked" }
|
|
- { name: "field_updatelocal_phone2", value: "oncreate" }
|
|
- { name: "field_map_address", value: "street" }
|
|
- { name: "field_lock_address", value: "locked" }
|
|
- { name: "field_updatelocal_address", value: "oncreate" }
|
|
- { name: "field_map_city", value: "l" }
|
|
- { name: "field_lock_city", value: "locked" }
|
|
- { name: "field_updatelocal_city", value: "oncreate" }
|
|
- { name: "field_map_country", value: "c" }
|
|
- { name: "field_lock_country", value: "locked" }
|
|
- { name: "field_updatelocal_country", value: "oncreate" }
|
|
- { name: "field_map_institution", value: "o" }
|
|
- { name: "field_lock_institution", value: "locked" }
|
|
- { name: "field_updatelocal_institution", value: "oncreate" }
|
|
- { name: "field_map_department", value: "ou" }
|
|
- { name: "field_lock_department", value: "locked" }
|
|
- { name: "field_updatelocal_department", value: "oncreate" }
|
|
- { name: "field_map_description", value: "description" }
|
|
- { name: "field_lock_description", value: "locked" }
|
|
- { name: "field_updatelocal_description", value: "oncreate" }
|
|
- { name: "field_map_idnumber", value: "employeeNumber" }
|
|
- { name: "field_lock_idnumber", value: "locked" }
|
|
- { name: "field_updatelocal_idnumber", value: "oncreate" }
|
|
- { name: "field_map_url", value: "labeledURI" }
|
|
- { name: "field_lock_url", value: "locked" }
|
|
- { name: "field_updatelocal_url", value: "oncreate" }
|
|
- { name: "field_map_lang", value: "preferredLanguage" }
|
|
- { name: "field_lock_lang", value: "locked" }
|
|
- { name: "field_updatelocal_lang", value: "oncreate" }
|
|
- { name: "field_map_firstnamephonetic", value: "infinitoNamePhoneticGiven" }
|
|
- { name: "field_lock_firstnamephonetic", value: "locked" }
|
|
- { name: "field_updatelocal_firstnamephonetic", value: "oncreate" }
|
|
- { name: "field_map_lastnamephonetic", value: "infinitoNamePhoneticFamily" }
|
|
- { name: "field_lock_lastnamephonetic", value: "locked" }
|
|
- { name: "field_updatelocal_lastnamephonetic", value: "oncreate" }
|
|
- { name: "field_map_timezone", value: "infinitoTimezone" }
|
|
- { name: "field_lock_timezone", value: "locked" }
|
|
- { name: "field_updatelocal_timezone", value: "oncreate" }
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/cfg.php --component=auth_ldap
|
|
--name={{ item.name }} --set="{{ item.value }}"
|
|
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
|
changed_when: false
|
|
|
|
- name: "🟢 Enable auth_ldap plugin"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/cfg.php --name=auth --set=ldap
|
|
when: not (MOODLE_OIDC_ENABLED | bool)
|
|
changed_when: false
|
|
|
|
- name: "🟢 Variant 0: enable both auth_oidc + auth_ldap (oidc primary)"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/cfg.php --name=auth --set=oidc,ldap
|
|
when: MOODLE_OIDC_ENABLED | bool
|
|
changed_when: false
|
|
|
|
- name: "🔑 Hide auth_ldap from login page in variant 0 (OIDC is the only entry point)"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/cfg.php --component=auth_ldap
|
|
--name=removecontexts --set=1
|
|
when: MOODLE_OIDC_ENABLED | bool
|
|
changed_when: false
|
|
|
|
- name: "⚡ Trigger auth_ldap sync to pre-provision LDAP users"
|
|
shell: >
|
|
container exec --user {{ MOODLE_RUNTIME_USER }} {{ MOODLE_CONTAINER_ADDRESS }}
|
|
php {{ MOODLE_CLI_DIR }}/scheduled_task.php
|
|
--execute='\auth_ldap\task\sync_task'
|
|
failed_when: false
|
|
changed_when: false
|