mirror of
https://github.com/famedly/ansible-collection-base
synced 2024-11-10 06:24:17 +00:00
feat(ldap): add role for managing openLDAP in a container
This commit is contained in:
parent
ff4a212d1e
commit
e473eb415b
12 changed files with 529 additions and 0 deletions
|
@ -1 +1,2 @@
|
|||
* @jcgruenhage @Ratzupaltuff
|
||||
/roles/ldap/ @jcgruenhage @transcaffeine
|
||||
|
|
52
roles/ldap/README.md
Normal file
52
roles/ldap/README.md
Normal file
|
@ -0,0 +1,52 @@
|
|||
# openLDAP role
|
||||
|
||||
## Description
|
||||
|
||||
Deploys [`famedly/containers/openldap`](https://gitlab.com/famedly/containers/openldap),
|
||||
which is openldap running in an alpine linux-based docker container.
|
||||
The `core.schema`, `cosine.schema` and `inetOrgPerson.schema` are loaded by default,
|
||||
and an MDB database is configured for the `ldap_domain`.
|
||||
|
||||
Access control lists (ACLs) can be specified in `ldap_acls` and are applied to the MDB database.
|
||||
A root user can be specified and has full access on the database,
|
||||
full access to the config (`cn=config`) is given to local root
|
||||
(`gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth`).
|
||||
|
||||
An `organizationalUnit` for users and groups is created per default,
|
||||
the users should be created as `uid=$userName,ou=users,$ldap_dn` with `objectClass=inetOrgPerson`,
|
||||
and groups would be `cn=$groupName,ou=groups,$ldap_dn` with `objectClass=groupOfNames`.
|
||||
|
||||
## Requirements
|
||||
|
||||
Needs `python-ldap` installed for the `ldap_entry`/`ldap_attr` modules to be able to connect.
|
||||
Docker daemon also needs to run and be accessable from the `ansible_user`.
|
||||
The role uses privilege escalation to become host-root to be able
|
||||
to set the ACLs in the container (which needs root there).
|
||||
|
||||
## Usage
|
||||
|
||||
- `ldap_domain`: Where the LDAP server runs, e.g. 'example.org'.
|
||||
The root node and it's DN are constructed from this value.
|
||||
|
||||
- `ldap_root_user`/`ldap_root_pass`/`ldap_root_pass_hash`: The root user
|
||||
of the database and the password in cleartext and the hashed form of the password
|
||||
which gets written into the config. The rootDN is constructed from
|
||||
`ldap_root_user`+`ldap_dn` (`ldap_dn` is constructed from `ldap_domain`).
|
||||
|
||||
- `ldap_org`: Name of the organization. A root node in the DIT is automatically
|
||||
created and the Organization name can be set here.
|
||||
|
||||
- `ldap_org_units`: Additional `organizationalUnit`s the role creates at the top
|
||||
level of the DIT. Defaults to `[ groups, users ]`.
|
||||
|
||||
- `ldap_additional_schemas`: Can be populated with dicts of the form
|
||||
`{name: "example.ldif", content: "schema_definition_here"}` to load those schemas
|
||||
into the ldap config tree during initial setup.
|
||||
|
||||
- `ldap_additional_indices`: Can be used to declare additional indices on the `mdb`
|
||||
database, like `uid eq` (maintains an equality index on the `uid` attribute).
|
||||
|
||||
See the [test playbook](tests/test.yml) for an example of how to use the role.
|
||||
|
||||
You can use `sudo ANSIBLE_ROLES_PATH="$(pwd)/roles" ansible-playbook -i roles/ldap/tests/inventory roles/ldap/tests/test.yml`
|
||||
from the collection-directory to run the tests.
|
58
roles/ldap/defaults/main.yml
Normal file
58
roles/ldap/defaults/main.yml
Normal file
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
ldap_base_path: /opt/ldap
|
||||
ldap_sock_path: "{{ ldap_base_path }}/sock"
|
||||
ldap_data_path: "{{ ldap_base_path }}/data"
|
||||
ldap_config_path: "{{ ldap_base_path }}/config"
|
||||
|
||||
ldap_container_version: "v2.4.50-r0"
|
||||
ldap_container_image: "registry.gitlab.com/famedly/containers/openldap:{{ ldap_container_version }}"
|
||||
ldap_container_name: ldap
|
||||
ldap_container_ports: "389:389"
|
||||
ldap_server_uri: "ldap:///"
|
||||
ldap_container_labels: {}
|
||||
ldap_container_networks: []
|
||||
ldap_container_etc_hosts: {}
|
||||
ldap_container_pull: true
|
||||
ldap_container_recreate: false
|
||||
|
||||
ldap_container_fd_soft_limit: "8192"
|
||||
ldap_container_fd_hard_limit: "8192"
|
||||
ldap_container_ulimits: ["nofile:{{ ldap_container_fd_soft_limit }}:{{ ldap_container_fd_hard_limit }}"]
|
||||
ldap_container_memory_reservation: "256M"
|
||||
ldap_container_memory: "512M"
|
||||
ldap_init_container_additional_volumes:
|
||||
- "{{ ldap_base_path }}/slapd.ldif:{{ ldap_container_slapd_file }}:z"
|
||||
|
||||
# phpLDAPadmin config
|
||||
ldap_management_container_enabled: False
|
||||
ldap_management_container_name: "ldap_management"
|
||||
ldap_management_version: "0.9.0"
|
||||
ldap_management_container_image: "docker.io/osixia/phpldapadmin:{{ ldap_management_version }}"
|
||||
ldap_management_container_ports: []
|
||||
ldap_management_container_env: {}
|
||||
ldap_management_container_labels: {}
|
||||
ldap_management_container_pull: true
|
||||
ldap_management_container_recreate: false
|
||||
|
||||
# LDAP specific config
|
||||
ldap_domain: ~
|
||||
ldap_dn: "dc={{ ldap_domain | regex_replace('\\.', ',dc=') }}"
|
||||
ldap_org: ~
|
||||
ldap_root_user: "admin"
|
||||
ldap_root_pass: ~
|
||||
ldap_root_pass_hash: ~
|
||||
ldap_rootdn: "cn={{ ldap_root_user }},{{ ldap_dn }}"
|
||||
ldap_config_db: "olcDatabase={1}mdb,cn=config"
|
||||
|
||||
# Expects {name: "costumSchema.ldif", content: $fileContent}
|
||||
ldap_additional_schemas: []
|
||||
ldap_additional_indices: []
|
||||
ldap_org_units:
|
||||
- groups
|
||||
- users
|
||||
|
||||
# Default ACLs
|
||||
ldap_acls:
|
||||
- "{0} to dn.subtree=\"{{ ldap_dn }}\" by dn.exact=\"{{ ldap_rootdn }}\" manage by * break"
|
||||
- "{1} to attrs=userPassword by anonymous auth by self =w by * none"
|
||||
- "{2} to * by users read"
|
13
roles/ldap/docs/MAINTENANCE.md
Normal file
13
roles/ldap/docs/MAINTENANCE.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Maintenance
|
||||
|
||||
## Updating
|
||||
|
||||
When the ldap container image is updated, one needs to make
|
||||
sure the config template is still up-to-date.
|
||||
|
||||
To do this, run `docker run --rm registry.gitlab.com/famedly/containers/openldap:$VERSION cat /etc/openldap/slapd.ldif > templates/slapd_$VERSION.ldif`
|
||||
and use `diff templates/slapd_$VERSION templates/slapd.ldif.j2`.
|
||||
|
||||
When you integrated potential config changes, make sure that the
|
||||
header in `templates/slapd.ldif.j2` is up-to-date AND both the
|
||||
version bump and the config change are done in a SINGLE commit.
|
87
roles/ldap/tasks/configure.yml
Normal file
87
roles/ldap/tasks/configure.yml
Normal file
|
@ -0,0 +1,87 @@
|
|||
---
|
||||
|
||||
# Configures the ACL via root on LDAP-IPC-Socket
|
||||
- name: Configure ACL
|
||||
become: true
|
||||
ldap_attr:
|
||||
dn: "{{ ldap_config_db }}"
|
||||
name: olcAccess
|
||||
values: "{{ ldap_acls }}"
|
||||
state: exact
|
||||
server_uri: "ldapi://{{ (ldap_sock_path + '/slapd.sock') | urlencode | replace('/', '%2F') }}"
|
||||
retries: 3
|
||||
delay: 3
|
||||
register: acl_res
|
||||
until: acl_res is succeeded
|
||||
tags:
|
||||
- ldap-sync
|
||||
- ldap-sync-acl
|
||||
|
||||
- name: Ensure rootDN credentials up-to-date
|
||||
become: true
|
||||
ldap_attr:
|
||||
dn: "{{ ldap_config_db }}"
|
||||
name: "{{ item.key }}"
|
||||
values: "{{ item.value }}"
|
||||
state: exact
|
||||
server_uri: "ldapi://{{ (ldap_sock_path + '/slapd.sock') | urlencode | replace('/', '%2F') }}"
|
||||
no_log: "{{ item.log is defined and item.log == false }}"
|
||||
loop:
|
||||
- key: olcRootDN
|
||||
value: "{{ ldap_rootdn }}"
|
||||
- key: olcRootPW
|
||||
value: "{{ ldap_root_pass }}"
|
||||
log: false
|
||||
tags:
|
||||
- ldap-sync
|
||||
|
||||
# Root node can be created with normal bind via LDAP
|
||||
- name: Create root node
|
||||
become: true
|
||||
ldap_entry:
|
||||
dn: "{{ ldap_dn }}"
|
||||
objectClass:
|
||||
- top
|
||||
- dcObject
|
||||
- organization
|
||||
attributes:
|
||||
dc: "{{ ldap_domain|regex_replace('\\..+', '') }}"
|
||||
o: "{{ ldap_org }}"
|
||||
bind_dn: "{{ ldap_rootdn }}"
|
||||
bind_pw: "{{ ldap_root_pass }}"
|
||||
server_uri: "{{ ldap_server_uri }}"
|
||||
tags:
|
||||
- ldap-sync
|
||||
|
||||
- name: Ensure root node is correctly configured
|
||||
become: true
|
||||
ldap_attr:
|
||||
dn: "{{ ldap_dn }}"
|
||||
name: "{{ item.key }}"
|
||||
values: "{{ item.value }}"
|
||||
state: exact
|
||||
bind_dn: "{{ ldap_rootdn }}"
|
||||
bind_pw: "{{ ldap_root_pass }}"
|
||||
server_uri: "{{ ldap_server_uri }}"
|
||||
no_log: "{{ item.log is defined and item.log == false }}"
|
||||
loop:
|
||||
- key: o
|
||||
value: "{{ ldap_org }}"
|
||||
- key: dc
|
||||
value: "{{ ldap_domain|regex_replace('\\..+', '') }}"
|
||||
tags:
|
||||
- ldap-sync
|
||||
|
||||
- name: Create organizational units
|
||||
ldap_entry:
|
||||
dn: "ou={{ ou_name }},{{ ldap_dn }}"
|
||||
objectClass: organizationalUnit
|
||||
state: present
|
||||
bind_dn: "{{ ldap_rootdn }}"
|
||||
bind_pw: "{{ ldap_root_pass }}"
|
||||
server_uri: "{{ ldap_server_uri }}"
|
||||
loop: "{{ ldap_org_units }}"
|
||||
loop_control:
|
||||
loop_var: ou_name
|
||||
tags:
|
||||
- ldap-sync
|
64
roles/ldap/tasks/initialize.yml
Normal file
64
roles/ldap/tasks/initialize.yml
Normal file
|
@ -0,0 +1,64 @@
|
|||
---
|
||||
|
||||
- name: Stat the LDAP OLC config directory
|
||||
stat:
|
||||
path: "{{ ldap_config_path }}/cn=config"
|
||||
register: stat_result
|
||||
|
||||
- name: Determine if the container needs to be initialized
|
||||
set_fact:
|
||||
ldap_needs_init: "{{ stat_result.stat.exists|bool == False }}"
|
||||
|
||||
- name: (init) Template initial slapd.ldif
|
||||
template:
|
||||
src: slapd.ldif.j2
|
||||
dest: "{{ ldap_base_path }}/slapd.ldif"
|
||||
mode: 0644
|
||||
when: ldap_needs_init|bool
|
||||
|
||||
- name: (init) Copy additional schema
|
||||
copy:
|
||||
content: "{{ schema.content }}"
|
||||
dest: "{{ ldap_base_path }}/{{ schema.name }}"
|
||||
mode: 0644
|
||||
when: ldap_needs_init|bool
|
||||
loop: "{{ ldap_additional_schemas }}"
|
||||
loop_control:
|
||||
loop_var: schema
|
||||
label: "{{ schema.name }}"
|
||||
|
||||
- name: (init) Map additional schemas into container
|
||||
set_fact:
|
||||
ldap_init_container_additional_volumes: >-
|
||||
{{ ldap_init_container_additional_volumes }}
|
||||
+ {{ volume_mount }}
|
||||
vars:
|
||||
schema_file: "{{ ldap_base_path }}/{{ schema.name }}"
|
||||
volume_mount:
|
||||
- "{{ schema_file }}:{{ ldap_container_schema_path }}/{{ schema.name }}:ro"
|
||||
when: ldap_needs_init|bool
|
||||
loop: "{{ ldap_additional_schemas }}"
|
||||
loop_control:
|
||||
loop_var: schema
|
||||
label: "{{ schema.name }}"
|
||||
|
||||
# The detach and cleanup options force the task to
|
||||
# stall until slapadd is done. Else, an unconfigured
|
||||
# container is started which will not work
|
||||
- name: (init) Run init script in container
|
||||
docker_container:
|
||||
name: "{{ ldap_container_name }}"
|
||||
image: "{{ ldap_container_image }}"
|
||||
command: "slapadd -v -F {{ ldap_container_conf_dir }} -n 0 -l {{ ldap_container_slapd_file }}"
|
||||
cleanup: yes
|
||||
detach: no
|
||||
container_default_behavior: no_defaults
|
||||
pull: "{{ ldap_container_pull }}"
|
||||
volumes: "{{ ldap_container_volumes + ldap_init_container_additional_volumes }}"
|
||||
when: ldap_needs_init|bool
|
||||
|
||||
- name: (init) Remove files needed for bootstrapping
|
||||
file:
|
||||
path: "{{ ldap_base_path }}/{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ [ { name: 'slapd.ldif'} ] + ldap_additional_schemas }}"
|
26
roles/ldap/tasks/ldap-web-ui.yml
Normal file
26
roles/ldap/tasks/ldap-web-ui.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
|
||||
- name: Ensure LDAP management container is started
|
||||
docker_container:
|
||||
name: "{{ ldap_management_container_name }}"
|
||||
image: "{{ ldap_management_container_image }}"
|
||||
ports: "{{ ldap_management_container_ports }}"
|
||||
labels: "{{ ldap_management_container_labels_complete }}"
|
||||
env: "{{ ldap_management_container_env }}"
|
||||
links:
|
||||
- "{{ ldap_container_name }}:ldap"
|
||||
restart_policy: unless-stopped
|
||||
recreate: "{{ ldap_management_container_recreate }}"
|
||||
pull: "{{ ldap_management_container_pull }}"
|
||||
healthcheck:
|
||||
test: >-
|
||||
[ $(pgrep -u www-data -c -f /usr/sbin/apache2) -gt 0 ]
|
||||
|| exit 1
|
||||
|
||||
when: ldap_management_container_enabled|bool
|
||||
|
||||
- name: Ensure LDAP management container is absent
|
||||
docker_container:
|
||||
name: "{{ ldap_management_container_name }}"
|
||||
state: absent
|
||||
when: not ldap_management_container_enabled|bool
|
47
roles/ldap/tasks/main.yml
Normal file
47
roles/ldap/tasks/main.yml
Normal file
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
|
||||
- name: Ensure base path exists
|
||||
file:
|
||||
path: "{{ ldap_base_path }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
|
||||
- name: Create volume paths
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
loop:
|
||||
- "{{ ldap_data_path }}"
|
||||
- "{{ ldap_config_path }}"
|
||||
- "{{ ldap_base_path }}/sock"
|
||||
|
||||
- name: Provide intial container configuration
|
||||
include_tasks: initialize.yml
|
||||
|
||||
- name: Ensure LDAP container is started
|
||||
docker_container:
|
||||
name: "{{ ldap_container_name }}"
|
||||
image: "{{ ldap_container_image }}"
|
||||
ports: "{{ ldap_container_ports }}"
|
||||
volumes: "{{ ldap_container_volumes }}"
|
||||
labels: "{{ ldap_container_labels_complete }}"
|
||||
networks: "{{ ldap_container_networks }}"
|
||||
etc_hosts: "{{ ldap_container_etc_hosts }}"
|
||||
ulimits: "{{ ldap_container_ulimits }}"
|
||||
memory_reservation: "{{ ldap_container_memory_reservation }}"
|
||||
memory: "{{ ldap_container_memory }}"
|
||||
restart_policy: unless-stopped
|
||||
recreate: "{{ ldap_container_recreate }}"
|
||||
pull: "{{ ldap_container_pull }}"
|
||||
healthcheck:
|
||||
test: >-
|
||||
[[ $(netstat -plnte | grep slapd | wc -l) -ge 1 ]]
|
||||
&& [[ $(ps aux | grep slapd | wc -l) -ge 1 ]]
|
||||
|| exit 1
|
||||
|
||||
- name: Configure LDAP DIT
|
||||
import_tasks: configure.yml
|
||||
|
||||
- name: Set up phpLDAPAdmin container
|
||||
import_tasks: ldap-web-ui.yml
|
115
roles/ldap/templates/slapd.ldif.j2
Normal file
115
roles/ldap/templates/slapd.ldif.j2
Normal file
|
@ -0,0 +1,115 @@
|
|||
# This config template is based on the slapd.ldif which is shipped in
|
||||
# https://gitlab.com/famedly/containers/openldap:v2.4.50-r1
|
||||
# For updating, see docs/MAINTENANCE.md
|
||||
#
|
||||
# See slapd-config(5) for details on configuration options.
|
||||
# This file should NOT be world readable.
|
||||
#
|
||||
dn: cn=config
|
||||
objectClass: olcGlobal
|
||||
cn: config
|
||||
#
|
||||
#
|
||||
# Define global ACLs to disable default read access.
|
||||
#
|
||||
# If you change this, set pidfile variable in /etc/conf.d/slapd!
|
||||
olcPidFile: /run/openldap/slapd.pid
|
||||
olcArgsFile: /run/openldap/slapd.args
|
||||
#
|
||||
# Do not enable referrals until AFTER you have a working directory
|
||||
# service AND an understanding of referrals.
|
||||
#olcReferral: ldap://root.openldap.org
|
||||
#
|
||||
# Sample security restrictions
|
||||
# Require integrity protection (prevent hijacking)
|
||||
# Require 112-bit (3DES or better) encryption for updates
|
||||
# Require 64-bit encryption for simple bind
|
||||
#olcSecurity: ssf=1 update_ssf=112 simple_bind=64
|
||||
|
||||
|
||||
#
|
||||
# Load dynamic backend modules:
|
||||
#
|
||||
dn: cn=module,cn=config
|
||||
objectClass: olcModuleList
|
||||
cn: module
|
||||
olcModulepath: /usr/lib/openldap
|
||||
#olcModuleload: back_bdb.so
|
||||
#olcModuleload: back_hdb.so
|
||||
#olcModuleload: back_ldap.so
|
||||
olcModuleload: back_mdb.so
|
||||
#olcModuleload: back_passwd.so
|
||||
#olcModuleload: back_shell.so
|
||||
|
||||
|
||||
dn: cn=schema,cn=config
|
||||
objectClass: olcSchemaConfig
|
||||
cn: schema
|
||||
|
||||
include: file:///etc/openldap/schema/core.ldif
|
||||
{% for schema in ldap_schemas_to_load %}
|
||||
include: file://{{ ldap_container_schema_path }}/{{ schema.name }}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
# Frontend settings
|
||||
#
|
||||
dn: olcDatabase=frontend,cn=config
|
||||
objectClass: olcDatabaseConfig
|
||||
objectClass: olcFrontendConfig
|
||||
olcDatabase: frontend
|
||||
|
||||
dn: olcDatabase=config,cn=config
|
||||
objectClass: olcDatabaseConfig
|
||||
olcDatabase: config
|
||||
olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none
|
||||
#
|
||||
# Sample global access control policy:
|
||||
# Root DSE: allow anyone to read it
|
||||
# Subschema (sub)entry DSE: allow anyone to read it
|
||||
# Other DSEs:
|
||||
# Allow self write access
|
||||
# Allow authenticated users read access
|
||||
# Allow anonymous users to authenticate
|
||||
#
|
||||
#olcAccess: to dn.base="" by * read
|
||||
#olcAccess: to dn.base="cn=Subschema" by * read
|
||||
#olcAccess: to *
|
||||
# by self write
|
||||
# by users read
|
||||
# by anonymous auth
|
||||
#
|
||||
# if no access controls are present, the default policy
|
||||
# allows anyone and everyone to read anything but restricts
|
||||
# updates to rootdn. (e.g., "access to * by * read")
|
||||
#
|
||||
# rootdn can always read and write EVERYTHING!
|
||||
#
|
||||
|
||||
|
||||
#######################################################################
|
||||
# LMDB database definitions
|
||||
#######################################################################
|
||||
#
|
||||
dn: olcDatabase=mdb,cn=config
|
||||
objectClass: olcDatabaseConfig
|
||||
objectClass: olcMdbConfig
|
||||
olcDatabase: mdb
|
||||
olcSuffix: {{ ldap_dn }}
|
||||
olcRootDN: {{ ldap_rootdn }}
|
||||
#
|
||||
# Cleartext passwords, especially for the rootdn, should
|
||||
# be avoided. See slappasswd(8) and slapd-config(5) for details.
|
||||
# Use of strong authentication encouraged.
|
||||
olcRootPW: {{ ldap_root_pass_hash }}
|
||||
#
|
||||
# The database directory MUST exist prior to running slapd AND
|
||||
# should only be accessible by the slapd and slap tools.
|
||||
# Mode 700 recommended.
|
||||
olcDbDirectory: {{ ldap_container_data_dir }}
|
||||
#
|
||||
# Indices to maintain
|
||||
olcDbIndex: objectClass eq
|
||||
{% for index in ldap_additional_indices %}
|
||||
olcDbIndex {{ index }}
|
||||
{% endfor %}
|
2
roles/ldap/tests/inventory
Normal file
2
roles/ldap/tests/inventory
Normal file
|
@ -0,0 +1,2 @@
|
|||
localhost ansible_connection=local
|
||||
|
34
roles/ldap/tests/test.yml
Normal file
34
roles/ldap/tests/test.yml
Normal file
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
- hosts: localhost
|
||||
remote_user: root
|
||||
roles:
|
||||
- ldap
|
||||
vars:
|
||||
ldap_domain: 'dep-b.example.org'
|
||||
ldap_org: "Department B of the Example Organization"
|
||||
ldap_root_pass: admin
|
||||
ldap_root_pass_hash: admin
|
||||
ldap_base_path: /tmp/ldap
|
||||
post_tasks:
|
||||
- name: Create dummy users in org
|
||||
ldap_entry:
|
||||
dn: "uid={{ item }},ou=users,{{ ldap_dn }}"
|
||||
objectClass:
|
||||
- inetOrgPerson
|
||||
attributes:
|
||||
uid: "{{ item }}"
|
||||
givenName: "firstname"
|
||||
sn: "surname"
|
||||
cn: "firstname lastname"
|
||||
mail: "{{ item }}@mail.{{ ldap_domain }}"
|
||||
userPassword: "{SSHA}NdjwrLbBHcs9JfWRoz//91CSDRYpmKvx" #password
|
||||
state: present
|
||||
bind_dn: "{{ ldap_rootdn }}"
|
||||
bind_pw: "{{ ldap_root_pass }}"
|
||||
server_uri: "ldap:///"
|
||||
loop:
|
||||
- testUserA
|
||||
- testUserB
|
||||
- testUserC
|
||||
- testManagerA
|
||||
- testManagerB
|
30
roles/ldap/vars/main.yml
Normal file
30
roles/ldap/vars/main.yml
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
|
||||
ldap_container_socket_dir: "/var/run/sockets"
|
||||
ldap_container_conf_dir: "/etc/openldap/slapd.d"
|
||||
ldap_container_data_dir: "/var/lib/openldap/openldap-data"
|
||||
ldap_container_slapd_file: "/etc/openldap/slapd.ldif"
|
||||
ldap_container_schema_path: "/etc/openldap/schema"
|
||||
|
||||
ldap_base_schemas_to_load:
|
||||
- name: cosine.ldif
|
||||
- name: inetorgperson.ldif
|
||||
ldap_schemas_to_load: >-
|
||||
{{ ldap_base_schemas_to_load }}
|
||||
+ {{ ldap_additional_schemas }}
|
||||
|
||||
|
||||
ldap_container_volumes:
|
||||
- "{{ ldap_config_path }}:{{ ldap_container_conf_dir }}:z"
|
||||
- "{{ ldap_data_path }}:{{ ldap_container_data_dir}}:z"
|
||||
- "{{ ldap_sock_path }}:{{ ldap_container_socket_dir }}:z"
|
||||
|
||||
ldap_container_labels_base:
|
||||
version: "{{ ldap_container_version }}"
|
||||
ldap_container_labels_complete: "{{ ldap_container_labels_base | combine(ldap_container_labels) }}"
|
||||
|
||||
|
||||
# phpLDAPadmin container labels
|
||||
ldap_management_container_labels_base:
|
||||
version: "{{ ldap_management_version }}"
|
||||
ldap_management_container_labels_complete: "{{ ldap_management_container_labels_base | combine(ldap_management_container_labels) }}"
|
Loading…
Reference in a new issue