From d96ac848cd02352261f6c587f6a928de1ee92696 Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Thu, 1 Dec 2016 20:21:05 +0200
Subject: [PATCH] - Forked from the example Ansible role. - Seems to work but
 lacks tests.

---
 .gitignore             |  2 ++
 README.rst             | 18 ++++++++++--------
 defaults/main.yml      |  4 +++-
 handlers/main.yml      |  2 +-
 meta/main.yml          | 12 ++++++++++--
 molecule.yml           | 23 +++++++++++++++++++++--
 tasks/main.yml         | 23 ++++++++++++++++++++---
 templates/receiver.sh  | 16 ++++++++++++++++
 tests/files/.gitkeep   |  0
 tests/playbook.yml     | 15 ++++++++++++---
 tests/requirements.yml |  1 +
 vars/main.yml          |  5 ++++-
 12 files changed, 100 insertions(+), 21 deletions(-)
 create mode 100644 templates/receiver.sh
 create mode 100644 tests/files/.gitkeep

diff --git a/.gitignore b/.gitignore
index e1cf205..ac22a07 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@ __pycache__
 .vagrant/
 *.log
 *.retry
+id_rsa
+id_rsa.pub
diff --git a/README.rst b/README.rst
index edf5c47..fa63887 100644
--- a/README.rst
+++ b/README.rst
@@ -1,12 +1,9 @@
-Example
-#######
+pelican-gitreceive
+##################
 
-.. image:: https://travis-ci.org/adarnimrod/example.svg?branch=master
-    :target: https://travis-ci.org/adarnimrod/example
-
-An (empty) example Ansible role complete with working tests out of the box. For
-more information read the `blog post
-<https://www.shore.co.il/blog/ansible-example-role/>`_.
+Publish a Pelican blog with gitreceive. Run :code:`git remote add publish
+git@hostname:blog` to add the git remote and run :code:`git push publish` to
+publish changes. This role does not configure a webserver.
 
 Requirements
 ------------
@@ -61,3 +58,8 @@ Nimrod Adar, `contact me <nimrod@shore.co.il>`_ or visit my `website
 <https://www.shore.co.il/>`_. Patches are welcome via `git send-email
 <http://git-scm.com/book/en/v2/Git-Commands-Email>`_. The repository is located
 at: https://www.shore.co.il/git/.
+
+TODO
+----
+
+- Tests.
diff --git a/defaults/main.yml b/defaults/main.yml
index 0a97962..2c12692 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -1,2 +1,4 @@
 ---
-# defaults file for example
+# defaults file for pelican-gitreceive
+pelican_gitreceive_output: '{{ pelican_gitreceive_www_root[ansible_os_family] }}/blog'
+pelican_gitreceive_public_keys: []
diff --git a/handlers/main.yml b/handlers/main.yml
index bd0df0d..61c6a84 100644
--- a/handlers/main.yml
+++ b/handlers/main.yml
@@ -1,2 +1,2 @@
 ---
-# handlers file for example
+# handlers file for pelican-gitreceive
diff --git a/meta/main.yml b/meta/main.yml
index 2dea7f4..b2bff06 100644
--- a/meta/main.yml
+++ b/meta/main.yml
@@ -1,6 +1,6 @@
 galaxy_info:
   author: Nimrod Adar
-  description: An example Ansible role
+  description: Publish a Pelican blog with gitreceive
   company: Shore technologies
   license: MIT
   min_ansible_version: 2.0
@@ -11,5 +11,13 @@ galaxy_info:
   - name: Ubuntu
     versions:
     - xenial
+    - trusty
+  - name: Debian
+    versions:
+    - jessie
   galaxy_tags: [ ansible ]
-dependencies: []
+dependencies:
+    - src: adarnimrod.python27
+    - src: adarnimrod.gitreceive
+      gitreceive_receiver_script: "{{ lookup('template', 'receiver.sh') }}"
+      gitreceive_public_keys: '{{ pelican_gitreceive_public_keys }}'
diff --git a/molecule.yml b/molecule.yml
index 3b66af5..8bf0ada 100644
--- a/molecule.yml
+++ b/molecule.yml
@@ -19,7 +19,7 @@ vagrant:
   - name: xenial
     box: ubuntu/xenial64
   instances:
-  - name: example
+  - name: pelican-gitreceive
     options:
         append_platform_to_hostname: yes
   raw_config_args:
@@ -30,7 +30,7 @@ vagrant:
 
 docker:
   containers:
-  - name: example-xenial
+  - name: pelican-gitreceive-xenial
     image: ubuntu
     image_version: xenial
     command: /sbin/init
@@ -42,3 +42,22 @@ docker:
     environment:
         DEBIAN_FRONTEND: noninteractive
         container: docker
+  - name: pelican-gitreceive-trusty
+    image: ubuntu-upstart
+    image_version: trusty
+    command: /sbin/init
+    environment:
+        DEBIAN_FRONTEND: noninteractive
+        container: docker
+  - name: pelican-gitreceive-jessie
+    image: debian
+    image_version: jessie
+    command: /sbin/init
+    cap_add:
+      - SYS_ADMIN
+    volume_mounts:
+      - /sys/fs/cgroup:/sys/fs/cgroup
+      - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
+    environment:
+        DEBIAN_FRONTEND: noninteractive
+        container: docker
diff --git a/tasks/main.yml b/tasks/main.yml
index 6784821..bb41a0d 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -1,8 +1,25 @@
 ---
-# tasks file for example
-
+# tasks file for pelican-gitreceive
 - name: Assertions
   assert:
     that:
         - ansible_os_family in ['OpenBSD', 'Debian']
-        - ansible_distribution_release in ['6.0', 'xenial']
+        - ansible_distribution_release in ['6.0', 'xenial', 'trusty', 'jessie']
+        - pelican_gitreceive_public_keys is iterable
+        - pelican_gitreceive_output is defined
+
+- name: pip install
+  with_items:
+      - pelican
+      - fabric
+  pip:
+      name: '{{ item }}'
+      state: present
+
+- name: Create directory structure
+  file:
+      path: /var/www/htdocs/www.shore.co.il/blog/
+      owner: git
+      group: git
+      state: directory
+      mode: 0o0755
diff --git a/templates/receiver.sh b/templates/receiver.sh
new file mode 100644
index 0000000..a7e9e8f
--- /dev/null
+++ b/templates/receiver.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -eu
+echo Recieving blog...
+tempdir="$(mktemp -d)"
+cd $tempdir
+tar -xf -
+echo Fetching Git submodules
+git submodule update --init --recursive
+echo Building blog...
+fab  build
+echo Syncing blog...
+rsync -Prv --delete --cvs-exclude output/ {{ pelican_gitreceive_output }}
+echo Cleanup...
+cd -
+rm -r "$tempdir"
+echo Successfully finished...
diff --git a/tests/files/.gitkeep b/tests/files/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/tests/playbook.yml b/tests/playbook.yml
index 740afed..57e3a41 100644
--- a/tests/playbook.yml
+++ b/tests/playbook.yml
@@ -1,12 +1,21 @@
 ---
-- hosts: example-openbsd
+- hosts: pelican-gitreceive-openbsd
   gather_facts: false
   roles: [adarnimrod.openbsd-bootstrap]
 
-- hosts: example-xenial
+- hosts: pelican-gitreceive-xenial
   gather_facts: false
   roles: [adarnimrod.debian-bootstrap]
 
 - hosts: all
+  pre_tasks:
+      - name: Create SSH keypair
+        become: False
+        local_action: command ssh-keygen -t rsa -N '' -f files/id_rsa
+        run_once: True
+        args:
+            creates: files/id_rsa
   roles:
-    - role: example
+    - role: adarnimrod.nginx
+    - role: pelican-gitreceive
+      pelican_gitreceive_public_keys: ['{{ lookup("file", "id_rsa.pub") }}']
diff --git a/tests/requirements.yml b/tests/requirements.yml
index cdc294c..96b7096 100644
--- a/tests/requirements.yml
+++ b/tests/requirements.yml
@@ -1,3 +1,4 @@
 ---
 - src: adarnimrod.openbsd-bootstrap
 - src: adarnimrod.debian-bootstrap
+- src: adarnimrod.nginx
diff --git a/vars/main.yml b/vars/main.yml
index 7542f3c..c9fd5f1 100644
--- a/vars/main.yml
+++ b/vars/main.yml
@@ -1,2 +1,5 @@
 ---
-# vars file for example
+# vars file for pelican-gitreceive
+pelican_gitreceive_www_root:
+    Debian: /var/www
+    OpenBSD: /var/www/htdocs
-- 
GitLab