# requires --extra-vars "{'repos': ['yokan.git', 'yumex.git']}" - name: Install the fedmsg hook into a number of fedorahosted git repos hosts: hosted03.fedoraproject.org user: root vars: prefix: /srv/git/ chained: /hooks/post-receive-chained.d fedmsg_hook: /usr/local/share/git/hooks/post-receive-fedorahosted-fedmsg chained_hook: /usr/share/git-core/post-receive-chained tasks: # XXX - @puiterwijk - I did run that playbook recently. and it has just one # bug: if you don't have the email post-receive hook when you run it, you'll # need to make the symlink yourself, or you'll get bugged on every push :-) # First -- a sanity check. We want this to fail and stop the playbook if # someone typoed and reponame. The "command" here claims that it "creates" a # file. That is not actually true, but it tells ansible to not bother running # the command *if* that creates= file is already present. Its a hackaround to # make this task idempotent. - name: make sure the git repos exist in the first place command: /bin/ls {{ prefix }}{{ item }} creates={{ prefix }}{{ item }} with_items: "{{ repos }}" - name: ensure there is a post-receive-chained.d/ directory file: > state=directory path="{{ prefix }}{{ item }}{{ chained }}/" with_items: "{{ repos }}" - name: move the old post-receive email hook into the chained dir command: > /bin/mv "{{ prefix }}{{ item }}/hooks/post-receive" "{{ prefix }}{{ item }}{{ chained }}/post-receive-email" removes="{{ prefix }}{{ item }}/hooks/post-receive" creates="{{ prefix }}{{ item }}{{ chained }}/post-receive-email" with_items: "{{ repos }}" - name: symlink the fedmsg hook into the chained dir file: > path="{{ prefix }}{{ item }}{{ chained }}/post-receive-fedmsg" src={{ fedmsg_hook }} state=link with_items: "{{ repos }}" - name: symlink in the chained hook redirector file: > path="{{ prefix }}{{ item }}/hooks/post-receive" src={{ chained_hook }} state=link with_items: "{{ repos }}"