Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,11 @@ samba_cl_packages:
- sssd-ad
- task-auth-ad-sssd
- sshpass

samba_sysvol_replica_required_vars:
- samba_sysvol_sync_source
- samba_sysvol_sync_targets
- samba_sysvol_sync_timeout

samba_sysvol_replica_packages:
- osync
4 changes: 4 additions & 0 deletions tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
include_tasks: client.yml
when: samba_flavor == 'client'

- name: configure sysvol sync
include_tasks: sysvol_sync.yml
when: samba_sysvol_sync is defined and samba_sysvol_sync and (samba_flavor == 'master' or samba_flavor == 'replica')

- name: refresh kerberos key
shell: echo {{samba_admin_pass}} | kinit administrator@{{samba_realm|upper}}
changed_when: false
Expand Down
56 changes: 56 additions & 0 deletions tasks/sysvol_sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
- name: check required variables
fail: msg="{{ item }} is not defined"
when: item not in vars
with_items: "{{ samba_sysvol_replica_required_vars }}"

- name: install samba sysvol replica
apt_rpm:
pkg: "{{samba_sysvol_replica_packages | join(',')}}"
state: installed
when: samba_sysvol_replica_packages | length > 0

- name: generate ssh key for osync connections
shell: ssh-keygen -t ed25519 -f .tmp/osync_sysvol -C "" -N ""
args:
creates: .tmp/osync_sysvol
delegate_to: localhost
become: false

- block:
- name: generate config for osync
template:
src: osync.conf
dest: "/etc/osync/sync-{{item}}.conf"
with_items: "{{samba_sysvol_sync_targets}}"

- name: register target hosts fingerprints
shell:
"ssh-keyscan {{item}} >> ~{{samba_sysvol_sync_target_user}}/.ssh/known_hosts"
with_items: "{{samba_sysvol_sync_targets}}"

- name: put private key to the node
copy:
src: .tmp/osync_sysvol
dest: "{{samba_sysvol_sync_ssh_key}}"
owner: "{{samba_sysvol_sync_target_user}}"
mode: 0400

- name: register osync in crontab
cron:
name: "OSync for {{item}}'s sysvol"
minute: "*/{{samba_sysvol_sync_timeout}}"
job: "/usr/bin/osync.sh /etc/osync/sync-{{item}}.conf --silent"
with_items: "{{samba_sysvol_sync_targets}}"

- name: enable and start crond service
service:
name: crond
enabled: true
state: started

when: inventory_hostname_short == samba_sysvol_sync_source

- name: register public key for osync
shell: echo "{{ lookup('file', '.tmp/osync_sysvol.pub') }}" >> /root/.ssh/authorized_keys
when: inventory_hostname_short in samba_sysvol_sync_targets
59 changes: 59 additions & 0 deletions templates/osync.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
INSTANCE_ID="sysvol_sync"
INITIATOR_SYNC_DIR="/var/lib/samba/sysvol"
TARGET_SYNC_DIR="ssh://{{samba_sysvol_sync_target_user}}@{{item}}//var/lib/samba/sysvol"
SSH_RSA_PRIVATE_KEY="{{samba_sysvol_sync_ssh_key}}"
SSH_PASSWORD_FILE=""
CREATE_DIRS=yes
LOGFILE=""
MINIMUM_SPACE=10240
BANDWIDTH=0
SUDO_EXEC=no
RSYNC_EXECUTABLE=rsync
RSYNC_REMOTE_PATH=""
RSYNC_PATTERN_FIRST=include
RSYNC_INCLUDE_PATTERN=""
RSYNC_EXCLUDE_PATTERN=""
RSYNC_INCLUDE_FROM=""
RSYNC_EXCLUDE_FROM=""
PATH_SEPARATOR_CHAR=";"
SSH_COMPRESSION=yes
SSH_IGNORE_KNOWN_HOSTS=no
REMOTE_HOST_PING=no
REMOTE_3RD_PARTY_HOSTS=""
RSYNC_OPTIONAL_ARGS=""
PRESERVE_PERMISSIONS=yes
PRESERVE_OWNER=yes
PRESERVE_GROUP=yes
PRESERVE_EXECUTABILITY=yes
PRESERVE_ACL=yes
PRESERVE_XATTR=yes
COPY_SYMLINKS=no
KEEP_DIRLINKS=no
PRESERVE_HARDLINKS=no
CHECKSUM=no
RSYNC_COMPRESS=yes
SOFT_MAX_EXEC_TIME=7200
HARD_MAX_EXEC_TIME=10600
KEEP_LOGGING=1801
MIN_WAIT=60
MAX_WAIT=7200
CONFLICT_BACKUP=yes
CONFLICT_BACKUP_MULTIPLE=no
CONFLICT_BACKUP_DAYS=30
CONFLICT_PREVALANCE=initiator
SOFT_DELETE=yes
SOFT_DELETE_DAYS=30
SKIP_DELETION=initiator
RESUME_SYNC=yes
RESUME_TRY=2
FORCE_STRANGER_LOCK_RESUME=no
PARTIAL=no
DELTA_COPIES=yes
LOCAL_RUN_BEFORE_CMD=""
LOCAL_RUN_AFTER_CMD=""
REMOTE_RUN_BEFORE_CMD=""
REMOTE_RUN_AFTER_CMD=""
MAX_EXEC_TIME_PER_CMD_BEFORE=0
MAX_EXEC_TIME_PER_CMD_AFTER=0
STOP_ON_CMD_ERROR=yes
RUN_AFTER_CMD_ON_ERROR=no