diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a184565 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,49 @@ +--- +dist: trusty +become: yes +become_method: sudo + +language: python +python: "2.7" + +env: + - ANSIBLE_VERSION=latest + - ANSIBLE_VERSION=2.0.1.0 + - ANSIBLE_VERSION=2.0.0.2 + - ANSIBLE_VERSION=2.0.0.1 + - ANSIBLE_VERSION=2.0.0.0 + +branches: + only: + - master + - best-practices + +matrix: + allow_failures: + # See https://github.com/ansible/ansible-modules-core/issues/1170 + # https://github.com/ansible/ansible-modules-core/issues/1298 + - env: ANSIBLE_VERSION=1.9.1 + +before_install: + - sudo apt-get update -qq + +install: + # Install Ansible. + - if [ "$ANSIBLE_VERSION" = "latest" ]; then pip install --no-binary ansible ansible; else pip install --no-binary ansible ansible==$ANSIBLE_VERSION; fi + - "{ echo '[defaults]'; echo 'roles_path = ../'; } >> ansible.cfg" + - "{ echo '- src: https://github.com/ind9-ops/java' ; echo ' version: master' ; echo ' name: java' } >> requirement.yml + - ansible-galaxy install -r requirements.yml + +script: + # Check the role/playbook's syntax. + - ansible-playbook -i tests/inventory tests/test.yml --syntax-check + + # Run the role/playbook with ansible-playbook. + - ansible-playbook -i tests/inventory tests/test.yml -vvvv + + # Run the role/playbook again, checking to make sure it's idempotent. + - > + ansible-playbook -i tests/inventory tests/test.yml + | grep -q 'changed=0.*failed=0' + && (echo 'Idempotence test: pass' && exit 0) + || (echo 'Idempotence test: fail' && exit 1) diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..65b7516 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,9 @@ +--- +gocd_common_user: go +gocd_common_group: go +gocd_common_debian_repository: https://download.go.cd/ +gocd_common_configure_ssh: false +gocd_common_ssh_known_domain: github.com +gocd_common_java_versions: + - oracle-java8-installer + - oracle-java8-set-default diff --git a/files/thoughtworks-go-download.repo b/files/thoughtworks-go-download.repo new file mode 100644 index 0000000..a35f166 --- /dev/null +++ b/files/thoughtworks-go-download.repo @@ -0,0 +1,7 @@ +# {{ansible_managed}} + +[thoughtworks-go-download] +name=Thoughtworks Go Repository +baseurl=https://download.go.cd/ +enabled=1 +gpgcheck=0 diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..40a1431 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,6 @@ +--- +dependencies: + - name: ind9-ops.java + src: git+git@github.com:ind9-ops/java.git + version: master + java_versions: "{{gocd_common_java_versions}}" diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..92570e1 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,106 @@ +--- +- name: Determine JAVA_HOME + shell: readlink -f /usr/bin/java | sed "s:bin/java::" + register: system_java_home + changed_when: false + +- name: Set GOCD_COMMON_JAVA_HOME + set_fact: + gocd_common_java_home: "{{system_java_home.stdout}}" + +- name: Thoughtworks go apt repository + become: yes + become_method: sudo + apt_repository: + repo: 'deb {{gocd_common_debian_repository}} /' + state: present + +# Note: If the user or group exists, but under another ID, Ansible will try and change it. +- name: Add go group + become: yes + become_method: sudo + group: + name: "{{gocd_common_group}}" + state: present + +- name: Add go user with home at /var/go + become: yes + become_method: sudo + user: + name: "{{gocd_common_user}}" + comment: "Go CD User" + group: "{{gocd_common_group}}" + home: /var/go + shell: /bin/bash + +- name: Gos .ssh folder + file: + path: /var/go/.ssh + state: directory + group: "{{gocd_common_group}}" + owner: "{{gocd_common_user}}" + when: gocd_common_configure_ssh + +- name: SSH public key + copy: + dest: /var/go/.ssh/{{GOCD_COMMON_SSH_PUBLIC_KEY | basename}} + src: "{{gocd_common_ssh_public_key}}" + group: "{{gocd_common_group}}" + mode: 0644 + owner: "{{gocd_common_user}}" + when: gocd_common_configure_ssh + +- name: SSH private key + copy: + dest: /var/go/.ssh/{{gocd_common_ssh_private_key | basename}} + src: "{{gocd_common_ssh_private_key}}" + group: "{{gocd_common_group}}" + mode: 0600 + owner: "{{gocd_common_user}}" + when: gocd_common_configure_ssh + +- name: Ensure git server is a known host + lineinfile: + dest: /var/go/.ssh/known_hosts + create: yes + state: present + line: "{{ lookup('pipe', 'ssh-keyscan -t rsa ' + gocd_common_ssh_known_domain) }}" + regexp: "^{{gocd_common_ssh_known_domain|replace('.', '\\.') }}" + group: "{{gocd_common_group}}" + mode: 0644 + owner: "{{gocd_common_user}}" + when: gocd_common_configure_ssh + +- name: Create log directory + become: yes + become_method: sudo + file: + path: /var/log/go-server + state: directory + owner: "{{gocd_common_user}}" + group: "{{gocd_common_group}}" + +- name: Create run directory + become: yes + become_method: sudo + file: + path: /var/run/go-server + state: directory + +- name: Create var/lib/go-server directory + become: yes + become_method: sudo + file: + path: /var/lib/go-server + state: directory + owner: "{{gocd_common_user}}" + group: "{{gocd_common_group}}" + +- name: Create etc/go directory + become: yes + become_method: sudo + file: + path: /etc/go + state: directory + owner: "{{gocd_common_user}}" + group: "{{gocd_common_group}}" diff --git a/test_vars/main.yml b/test_vars/main.yml new file mode 100644 index 0000000..566479b --- /dev/null +++ b/test_vars/main.yml @@ -0,0 +1,8 @@ +--- +gocd_common_user: go +gocd_common_group: go +gocd_common_debian_repository: https://download.go.cd/ +gocd_common_configure_ssh: false +gocd_common_ssh_known_domain: github.com +gocd_common_java_versions: + - oracle-jdk7-installer diff --git a/tests/inventory b/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/tests/test.yml b/tests/test.yml new file mode 100644 index 0000000..e4b81e0 --- /dev/null +++ b/tests/test.yml @@ -0,0 +1,8 @@ +# test file for go-common +--- +- hosts: localhost + connection: local + become: yes + become_method: sudo + roles: + - ../../ diff --git a/tests/vagrant.yml b/tests/vagrant.yml new file mode 100644 index 0000000..cd4a305 --- /dev/null +++ b/tests/vagrant.yml @@ -0,0 +1,7 @@ +# test for go-common +--- +- hosts: all + remote_user: vagrant + sudo: true + roles: + - ../../