--- - name: install gitolite apt: name: - git - gitolite3 - name: prepare storage volume for /srv/git when: gitolite_storage is defined vars: storage_volume: "{{ gitolite_storage | combine({'dest': gitolite_base_path}) }}" include_role: name: "storage/{{ gitolite_storage.type }}/volume" - name: create gitolite instance user loop: "{{ gitolite_instances | dict2items }}" loop_control: label: "{{ item.key }}" user: name: "{{ item.value.user | default('git-' + item.key) }}" home: "{{ gitolite_base_path }}/{{ item.key }}" shell: /bin/sh system: yes state: present - name: make sure base dir is owned by gitolite user loop: "{{ gitolite_instances | dict2items }}" loop_control: label: "{{ item.key }}" file: path: "{{ gitolite_base_path }}/{{ item.key }}" mode: 0750 owner: "{{ item.value.user | default('git-' + item.key) }}" group: "{{ item.value.user | default('git-' + item.key) }}" - name: deploy primary admin key loop: "{{ gitolite_instances | dict2items }}" loop_control: label: "{{ item.key }}" copy: content: "{{ item.value.primary_admin_key }}" dest: "{{ gitolite_base_path }}/{{ item.key }}/primary-admin.pub" - name: run initial gitolite setup loop: "{{ gitolite_instances | dict2items }}" loop_control: label: "{{ item.key }}" become: yes become_method: su become_user: "{{ item.value.user | default('git-' + item.key) }}" args: creates: "{{ gitolite_base_path }}/{{ item.key }}/.gitolite.rc" chdir: "{{ gitolite_base_path }}/{{ item.key }}" command: gitolite setup -pk "{{ gitolite_base_path }}/{{ item.key }}/primary-admin.pub" register: gitolite_instance_initial_setup - name: remove testing repository loop: "{{ gitolite_instance_initial_setup.results }}" loop_control: label: "{{ item.item.key }}" when: item is changed file: path: "{{ gitolite_base_path }}/{{ item.item.key }}/repositories/testing.git" state: absent - name: configure umask loop: "{{ gitolite_instances | dict2items }}" loop_control: label: "{{ item.key }}" lineinfile: path: "{{ gitolite_base_path }}/{{ item.key }}/.gitolite.rc" backrefs: yes regexp: "^(\\s*UMASK\\s*=>\\s*).*(,.*)$" line: '\g<1>{{ item.value.umask | default("0077") }}\2' - name: configure GIT_CONFIG_KEYS to allow gitweb settings loop: "{{ gitolite_instances | list }}" lineinfile: path: "{{ gitolite_base_path }}/{{ item }}/.gitolite.rc" backrefs: yes regexp: "^(\\s*GIT_CONFIG_KEYS\\s*=>\\s*').*('.*)$" line: '\1cgit.*\2' - name: disable gitweb gitolite command loop: "{{ gitolite_instances | list }}" lineinfile: path: "{{ gitolite_base_path }}/{{ item }}/.gitolite.rc" backrefs: yes regexp: "^(\\s*)('gitweb'.*)$" line: '\1# \2' - name: enable daemon gitolite command loop: "{{ gitolite_instances | list }}" lineinfile: path: "{{ gitolite_base_path }}/{{ item }}/.gitolite.rc" backrefs: yes regexp: "^(\\s*)#?\\s*('daemon'.*)$" line: '\1\2' - name: install git-fsck script template: src: git-fsck.sh.j2 dest: "{{ gitolite_base_path }}/git-fsck.sh" mode: 0755 - name: install template systemd unit for git-fsck template: src: git-fsck@.service.j2 dest: /etc/systemd/system/git-fsck@.service - name: install systemd timer unit for git-fsck loop: "{{ gitolite_instances | list }}" template: src: git-fsck-.timer.j2 dest: "/etc/systemd/system/git-fsck-{{ item }}.timer" - name: start/enable git-fsck systemd timer loop: "{{ gitolite_instances | list }}" systemd: daemon_reload: yes name: "git-fsck-{{ item }}.timer" state: started enabled: yes