diff --git a/.gitignore b/.gitignore index 35dfd65..58ed089 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Config file. config.yml +!tests/config.yml # Hosts file. hosts diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..21e2ed6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,41 @@ +--- +services: docker + +env: + # Test on ubuntu and mint OSes. + - distro: ubuntu1604 + init: /lib/systemd/systemd + run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" + docker_image: "geerlingguy/docker-ubuntu1604-ansible:latest" + - distro: ubuntu1404 + init: /sbin/init + run_opts: "" + docker_image: "geerlingguy/docker-ubuntu1404-ansible:latest" + +before_install: + # Pull container. + - 'docker pull ${docker_image}' + +script: + - container_id=$(mktemp) + - cp tests/config.yml config.yml + # Run container in detached state. + - 'docker run --detach --volume="${PWD}":/root/developer_machine:rw ${run_opts} ${docker_image} "${init}" > "${container_id}"' + + # Install dependencies. + - 'docker exec "$(cat ${container_id})" ansible-galaxy install -r /root/developer_machine/provisioning/requirements.yml' + + # Ansible syntax check. + - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /root/developer_machine/provisioning/playbook.yml --syntax-check' + + # Test role. + - 'docker exec "$(cat ${container_id})" env TERM=xterm ansible-playbook /root/developer_machine/provisioning/playbook.yml' + + # Test role idempotence. + - idempotence=$(mktemp) + - docker exec "$(cat ${container_id})" ansible-playbook /root/developer_machine/provisioning/playbook.yml | tee -a {idempotence} + - > + tail ${idempotence} + | grep -q 'changed=0.*failed=0' + && (echo 'Idempotence test: pass' && exit 0) + || (echo 'Idempotence test: fail' && exit 1) diff --git a/custom.config.yml b/custom.config.yml index 225fedc..2dcd5a6 100644 --- a/custom.config.yml +++ b/custom.config.yml @@ -7,20 +7,21 @@ install_spotify: true install_node: true install_ruby: true install_virtualbox: true +install_ansible: true manativm: false # PHP configuration. php_packages: - - php5-common - - php5-cli - - php5-dev + - php7.1-common + - php7.1-cli + - php7.1-dev - libpcre3-dev - - php5-gd - - php5-curl - - php5-imap - - php5-json - - php5-opcache - - php5-xml - - php5-mbstring + - php7.1-gd + - php7.1-curl + - php7.1-imap + - php7.1-json + - php7.1-opcache + - php7.1-xml + - php7.1-mbstring - php-sqlite3 - php-apcu diff --git a/provisioning/playbook.yml b/provisioning/playbook.yml index 36a52ba..3e118d2 100644 --- a/provisioning/playbook.yml +++ b/provisioning/playbook.yml @@ -9,12 +9,14 @@ gather_facts: False pre_tasks: - include: tasks/init.yml + - include: tasks/include-vars.yml - include: tasks/init-debian.yml + - include: tasks/ansible.yml + when: install_ansible roles: # Essential roles. - geerlingguy.git - - dwcramer.ansible - andrewrothstein.vagrant - { role: wtanaka.virtualbox, when: install_virtualbox } - { role: gvillalta99.nvm, when: install_node } diff --git a/provisioning/tasks/ansible.yml b/provisioning/tasks/ansible.yml new file mode 100644 index 0000000..fa90b2c --- /dev/null +++ b/provisioning/tasks/ansible.yml @@ -0,0 +1,17 @@ +--- +# tasks file for ansible (Ubuntu specific) + +- name: Install Ansible PPA key + apt_key: > + id=6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367 + keyserver=keyserver.ubuntu.com + state=present + +- name: Install Ansible PPA + apt_repository: > + repo='ppa:ansible/ansible' + state=present + codename={{ distro_codename }} + +- name: Install Ansible packages + apt: name='ansible' state=present update_cache=yes diff --git a/provisioning/tasks/include-vars.yml b/provisioning/tasks/include-vars.yml new file mode 100644 index 0000000..0ed69fa --- /dev/null +++ b/provisioning/tasks/include-vars.yml @@ -0,0 +1,9 @@ +--- +- name: Include codename var. + include_vars: "{{ ansible_distribution_release }}.yml" + when: (ansible_distribution == "Ubuntu" and ansible_distribution_release == "qiana") or + (ansible_distribution == "Ubuntu" and ansible_distribution_release == "rebecca") or + (ansible_distribution == "Ubuntu" and ansible_distribution_release == "rafaela") or + (ansible_distribution == "Ubuntu" and ansible_distribution_release == "rosa") or + (ansible_distribution == "Ubuntu" and ansible_distribution_release == "sarah") or + (ansible_distribution == "Ubuntu" and ansible_distribution_release == "serena") diff --git a/provisioning/tasks/init-debian.yml b/provisioning/tasks/init-debian.yml index 7ce6a4f..9d80ba7 100644 --- a/provisioning/tasks/init-debian.yml +++ b/provisioning/tasks/init-debian.yml @@ -13,4 +13,7 @@ - libgnome-keyring-dev - name: Add repository for PHP - apt_repository: repo='ppa:ondrej/php' + apt_repository: + repo='ppa:ondrej/php' + state=present + codename={{ distro_codename }} diff --git a/provisioning/vars/main.yml b/provisioning/vars/main.yml index 48b6896..6a835ff 100644 --- a/provisioning/vars/main.yml +++ b/provisioning/vars/main.yml @@ -2,9 +2,11 @@ ansible_python_interpreter: /usr/bin/python2.7 drush_version: '8.x' ansible_install_version: '2.2.1' -vagrant_version: '1.9.1' +vagrant_version: '2.0.1' +vagrant_pkg_suffix: 'deb' nvm: - default_node_version: "4" + default_node_version: "6" + node_version: "6" dependencies: apt: - git @@ -12,17 +14,14 @@ nvm: - build-essential - libssl-dev node_versions: - - '4' - - '5' - '6' - packages: - - grunt-cli - - gulp-cli - - bower + packages: [] path: "~/.nvm" profile_file: "~/.bashrc" - version: 'v0.20.0' + version: 'v0.33.8' rvm_install_type: 'user' extra_packages: - mysql-client - nfs-kernel-server + +distro_codename: "{{ ansible_distribution_release }}" diff --git a/provisioning/vars/qiana.yml b/provisioning/vars/qiana.yml new file mode 100644 index 0000000..7ee70a3 --- /dev/null +++ b/provisioning/vars/qiana.yml @@ -0,0 +1 @@ +distro_codename: 'trusty' diff --git a/provisioning/vars/rafaela.yml b/provisioning/vars/rafaela.yml new file mode 100644 index 0000000..7ee70a3 --- /dev/null +++ b/provisioning/vars/rafaela.yml @@ -0,0 +1 @@ +distro_codename: 'trusty' diff --git a/provisioning/vars/rebecca.yml b/provisioning/vars/rebecca.yml new file mode 100644 index 0000000..7ee70a3 --- /dev/null +++ b/provisioning/vars/rebecca.yml @@ -0,0 +1 @@ +distro_codename: 'trusty' diff --git a/provisioning/vars/rosa.yml b/provisioning/vars/rosa.yml new file mode 100644 index 0000000..7ee70a3 --- /dev/null +++ b/provisioning/vars/rosa.yml @@ -0,0 +1 @@ +distro_codename: 'trusty' diff --git a/provisioning/vars/sarah.yml b/provisioning/vars/sarah.yml new file mode 100644 index 0000000..38434c8 --- /dev/null +++ b/provisioning/vars/sarah.yml @@ -0,0 +1 @@ +distro_codename: 'xenial' diff --git a/provisioning/vars/serena.yml b/provisioning/vars/serena.yml new file mode 100644 index 0000000..38434c8 --- /dev/null +++ b/provisioning/vars/serena.yml @@ -0,0 +1 @@ +distro_codename: 'xenial' diff --git a/tests/config.yml b/tests/config.yml new file mode 100644 index 0000000..4672fc4 --- /dev/null +++ b/tests/config.yml @@ -0,0 +1,27 @@ +install_atom: true +install_keepassx: true +install_chrome: true +install_slack: true +install_dropbox: true +install_spotify: true +install_node: true +install_ruby: true +install_virtualbox: true +install_ansible: false +manativm: false + +# PHP configuration. +php_packages: + - php7.1-common + - php7.1-cli + - php7.1-dev + - libpcre3-dev + - php7.1-gd + - php7.1-curl + - php7.1-imap + - php7.1-json + - php7.1-opcache + - php7.1-xml + - php7.1-mbstring + - php-sqlite3 + - php-apcu