|
|
|
---
|
|
|
|
|
|
|
|
- name: Build trusted domains list
|
|
|
|
set_fact: ad_trusted_domains_conf={{ ad_trusted_domains_conf | default([]) + [ad_default_trusted_domain | combine(item,recursive=True)] }}
|
|
|
|
with_items: "{{ ad_trusted_domains }}"
|
|
|
|
tags: auth
|
|
|
|
- set_fact: ad_trusted_domains={{ ad_trusted_domains_conf | default([]) }}
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- include: install_{{ ansible_os_family }}.yml
|
|
|
|
|
|
|
|
- name: Set LDAP base
|
|
|
|
set_fact: ad_ldap_base=DC={{ ad_realm | regex_replace('\.',',DC=') }}
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- include_tasks: pam_{{ ansible_os_family }}.yml
|
|
|
|
|
|
|
|
- name: Check if there's a secrets.tdb DB
|
|
|
|
stat: path=/var/lib/samba/private/secrets.tdb
|
|
|
|
register: ad_samba_secrets
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Deploy sssd configuration
|
|
|
|
template: src=sssd.conf.j2 dest=/etc/sssd/sssd.conf mode=600
|
|
|
|
notify: restart sssd ad
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Deploy krb5 configuration
|
|
|
|
template: src=krb5.conf.j2 dest=/etc/krb5.conf
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Remove current keytab
|
|
|
|
file: path=/etc/krb5.keytab state=absent
|
|
|
|
when: ad_force_join | bool
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Check if we already have our keytab file
|
|
|
|
stat: path=/etc/krb5.keytab
|
|
|
|
register: ad_keytab
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
# We need to have our correct hostname before joining the domain !!
|
|
|
|
- name: Set system hostname
|
|
|
|
hostname: name={{ system_hostname | default(inventory_hostname | regex_replace('^([^\.]+)\..*','\\1')) }}
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Join the domain
|
|
|
|
command: adcli join {{ ad_realm | upper }} --login-user={{ ad_admin }} --host-fqdn={{ ansible_hostname }}.{{ ad_realm }} --stdin-password
|
|
|
|
args:
|
|
|
|
stdin: "{{ ad_admin_pass }}"
|
|
|
|
no_log: True
|
|
|
|
when: not ad_keytab.stat.exists
|
|
|
|
register: ad_join
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Check if we're a DC
|
|
|
|
stat: path=/var/lib/samba/private/secrets.keytab
|
|
|
|
register: ad_dc_keytab
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Add a cron task to renew machine password
|
|
|
|
cron:
|
|
|
|
name: sssd_ad
|
|
|
|
cron_file: renew_ad_pass
|
|
|
|
minute: "{{ 59 | random(seed=inventory_hostname) }}"
|
|
|
|
hour: "{{ 23 | random(seed=inventory_hostname) }}"
|
|
|
|
day: "{{ 28 | random(seed=inventory_hostname) }}"
|
|
|
|
user: root
|
|
|
|
job: net ads changetrustpw
|
|
|
|
state: "{{ (ad_dc_keytab.stat.exists or not ad_samba_secrets.stat.exists) | ternary('absent','present') }}"
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Create keytabs dir
|
|
|
|
file: path=/var/lib/sss/keytabs state=directory owner=sssd mode=700
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Join trusted domains
|
|
|
|
command: adcli join {{ item.name | upper }} --login-user={{ item.admin_user }} --stdin-password --host-keytab=/var/lib/sss/keytabs/{{ item.name | upper }}.keytab
|
|
|
|
args:
|
|
|
|
stdin: "{{ item.admin_pass }}"
|
|
|
|
creates: /var/lib/sss/keytabs/{{ item.name | upper }}.keytab
|
|
|
|
become_user: sssd
|
|
|
|
with_items: "{{ ad_trusted_domains }}"
|
|
|
|
register: ad_trusted_join
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
- name: Start and enable services
|
|
|
|
service: name={{ item }} state=started enabled=True
|
|
|
|
with_items:
|
|
|
|
- sssd
|
|
|
|
- oddjobd
|
|
|
|
tags: auth
|
|
|
|
|
|
|
|
# On el8 for example, sssd is already installed and running on a default setup
|
|
|
|
# so we need to restart it now, so users are available (for eg, ssh authorized_keys setup)
|
|
|
|
# We can't rely on the handler, because it would only run at the end of the playbook
|
|
|
|
- name: Restart sssd if needed
|
|
|
|
service: name=sssd state=restarted
|
|
|
|
when: ad_join.changed or ad_trusted_join.results | selectattr('changed','equalto',True) | list | length > 0
|
|
|
|
tags: auth
|