# File: roles/samba/tasks/main.yml --- - name: Include OS specific variables include_vars: "{{ item }}" with_first_found: - "os_{{ ansible_distribution }}.yml" - "os_{{ ansible_os_family }}.yml" tags: samba - name: Install Samba packages package: name: "{{ samba_packages }}" state: present tags: samba - name: Install Samba VFS extensions packages package: name: "{{ samba_vfs_packages }}" state: present when: samba_vfs_packages is defined tags: samba - name: Register Samba version shell: > set -o nounset -o pipefail -o errexit && smbd --version | sed 's/Version //' args: executable: /bin/bash register: samba_version changed_when: false tags: samba # - name: "Installed Samba version:" # debug: # msg: "{{ samba_version }}" # tags: samba - name: Install SELinux package package: name: "{{ samba_selinux_packages }}" state: present when: ansible_selinux is defined and ansible_selinux.status == 'enabled' tags: samba - name: Make sure SELinux boolean settings are correct seboolean: name: "{{ item }}" state: true persistent: true with_items: "{{ samba_selinux_booleans }}" when: ansible_selinux is defined and ansible_selinux.status == 'enabled' tags: samba - name: Create Samba shares root directory file: state: directory path: "{{ samba_shares_root }}" owner: root group: root mode: '0755' when: samba_shares|length > 0 tags: samba - name: Create share directories with_items: "{{ samba_shares }}" file: state: directory path: "{{ item.path|default([samba_shares_root,item.name]|join('/')) }}" owner: "{{ item.owner|default('root') }}" group: "{{ item.group|default('users') }}" mode: "{{ item.directory_mode|default('0775') }}" setype: "{{ item.setype|default('samba_share_t') }}" tags: samba - name: Ensure webserver document root exists file: name: "{{ samba_www_documentroot }}" state: directory when: samba_create_varwww_symlinks|bool tags: samba - name: Create link to shares in webserver document root file: state: link path: "{{ samba_www_documentroot }}/{{ item.name }}" src: "{{ item.path|default([samba_shares_root,item.name]|join('/')) }}" with_items: "{{ samba_shares }}" when: samba_create_varwww_symlinks|bool tags: samba - name: Samba configuration template: dest: "{{ samba_configuration }}" src: smb.conf.j2 validate: 'testparm -s %s' notify: - Restart Samba services tags: samba - name: Install global include file template: src: "{{ samba_global_include }}" dest: "{{ samba_configuration_dir }}" validate: 'testparm -s %s' when: samba_global_include is defined notify: - Restart Samba services tags: samba - name: Install home include file template: src: "{{ samba_homes_include }}" dest: "{{ samba_configuration_dir }}" validate: 'testparm -s %s' when: samba_homes_include is defined notify: - Restart Samba services tags: samba - name: Install share specific include files template: src: "{{ item.include_file }}" dest: "{{ samba_configuration_dir }}" validate: 'testparm -s %s' when: item.include_file is defined notify: - Restart Samba services with_items: "{{ samba_shares }}" tags: samba - name: Create username map file if needed template: dest: "{{ samba_username_map_file }}" src: smbusers.j2 notify: - Restart Samba services when: samba_username_map is defined tags: samba - name: Start Samba service(s) service: name: "{{ item }}" state: started enabled: true with_items: "{{ samba_services }}" tags: samba - name: Create Samba users if they don't exist yet shell: > set -o nounset -o pipefail -o errexit && (pdbedit --user={{ item.name }} 2>&1 > /dev/null) \ || (echo {{ item.password }}; echo {{ item.password }}) \ | smbpasswd -s -a {{ item.name }} args: executable: /bin/bash with_items: "{{ samba_users }}" no_log: true register: create_user_output changed_when: "'Added user' in create_user_output.stdout" tags: samba