diff --git a/Vagrantfile b/Vagrantfile index 300f1e68..e685a7ab 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -10,7 +10,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # please see the online documentation at vagrantup.com. config.vm.box = "hashicorp/precise64" - config.vm.synced_folder ".", "/usr/local/tunapanda/provision" + config.vm.synced_folder ".", "/opt/tunapanda/provision" # These environment vars can be used to alter the behavior of # the bootstrapping script. @@ -25,7 +25,7 @@ export PROVISION_BOOTSTRAP_DIR="#{ENV['PROVISION_BOOTSTRAP_DIR']}" export PROVISION_BOOTSTRAP_PLAYBOOK="#{ENV['PROVISION_BOOTSTRAP_PLAYBOOK']}" export PROVISION_BOOTSTRAP_INVENTORY="#{ENV['PROVISION_BOOTSTRAP_INVENTORY']}" export PROVISION_BOOTSTRAP_FALLBACK_URL="#{ENV['PROVISION_BOOTSTRAP_FALLBACK_URL']}" -/usr/local/tunapanda/provision/scripts/bootstrap.sh +/opt/tunapanda/provision/scripts/bootstrap.sh SCRIPT config.vm.provision "shell", inline: $script, keep_color: true diff --git a/localconfig.yml.sample b/localconfig.yml.sample deleted file mode 100644 index 290273e0..00000000 --- a/localconfig.yml.sample +++ /dev/null @@ -1,24 +0,0 @@ ---- -# If you know what you are doing, you can customize which roles are deployed -# by creating a copy of this file called `localconfig.yml` and selecting -# your own groups below. -# -# Each file in `playbooks/group_vars` represents an available group. -# Separate multiple groups with commas. -groups: [ default ] - -# You can also fine-tune settings here. You can get a list of -# available settings and their default values by running: -# -# cat playbooks/roles/*/defaults/main.yml -# -# ...but don't forget that these values may also be overridden for -# your group(s), as described in the playbooks/group_vars/ files. -# -# Overides defined here take precedence over values specified anywhere -# else. -# -vars: - var1: "val1" - var2: "val2" - var3: "val3" diff --git a/playbooks/ansible.cfg b/playbooks/ansible.cfg index 667351dc..8188e3b8 100644 --- a/playbooks/ansible.cfg +++ b/playbooks/ansible.cfg @@ -1,5 +1,5 @@ [defaults] log_path = ansible.log host_key_checking = False -library = /usr/local/tunapanda/provision/ext/edx/playbooks/library -roles_path = /usr/local/tunapanda/provision/playbooks/roles:/usr/local/tunapanda/provision/ext/edx/playbooks/roles +library = ../ext/edx/playbooks/library +roles_path = roles:../ext/edx/playbooks/roles diff --git a/playbooks/bootstrap.yml b/playbooks/bootstrap.yml index 148b6b83..e9e634ae 100644 --- a/playbooks/bootstrap.yml +++ b/playbooks/bootstrap.yml @@ -7,7 +7,7 @@ - hosts: all tasks: - name: "install dependencies" - apt: + apt: name={{ item }} state=installed with_items: diff --git a/playbooks/bootstrap_git.yml b/playbooks/bootstrap_git.yml index a51ad69e..d0fad776 100644 --- a/playbooks/bootstrap_git.yml +++ b/playbooks/bootstrap_git.yml @@ -1,7 +1,7 @@ --- # Get info on the repo dir - stat: - path={{ dir }} + path={{ dir }} follow=yes register: d @@ -9,10 +9,10 @@ # local changes. #- name: "Updating repository repo in {{dir}}" ## Ansible's git module seems to "update" to the specified branch -## in a way that loses local commits if they haven't yet been -## pushed to the branch specified by {{ ver }}. +## in a way that loses local commits if they haven't yet been +## pushed to the branch specified by {{ ver }}. # TODO: Find a safe way to automatically pull down updates -# git: +# git: # ssh_opts="-o StrictHostKeyChecking=no" # repo={{ repo }} # dest={{ dir }} @@ -21,14 +21,14 @@ # recursive=yes # ignore_errors: yes # when: d.stat.exists == True - + # If directory does not exist, clone it - name: "Cloning repository repo in {{dir}}" - git: + git: ssh_opts="-o StrictHostKeyChecking=no" repo={{ repo }} dest={{ dir }} version={{ ver }} recursive=yes when: d.stat.exists == False - + diff --git a/playbooks/cubietruck.yml b/playbooks/cubietruck.yml new file mode 100644 index 00000000..a4f3c7c0 --- /dev/null +++ b/playbooks/cubietruck.yml @@ -0,0 +1,67 @@ +--- +## +## This file contains settings for a standalone ARM device that +## serves as a wireless access point and has edX pre-installed +## +- hosts: all + pre_tasks: + - shell: echo "Last provisioning started at $(date)" > {{ provision__base_dir }}/provisioning.txt + post_tasks: + - shell: echo "Last provisioning completed at $(date)" >> {{ provision__base_dir }}/provisioning.txt + + roles: + - role: debops.ifupdown + - role: provision_base + - role: kalite + - role: wap + - role: edx_portal + - role: iptables + - role: vidtest + - role: portal + - role: cubietruck_net + + vars: + # Common vars + provision__base_dir: "/opt/tunapanda" + provision__data_dir: "{{ provision__base_dir }}/data" + provision__ext_dir: "{{ provision__base_dir }}/provision/ext" + provision__default_packages: [ git, vim, screen ] + provision__sites_available_dir: "/etc/nginx/sites-available" + provision__sites_enabled_dir: "/etc/nginx/sites-enabled" + + # TODO: split these off into roles? + apache_dir: "/etc/apache2" + apache_docroot: "/var/www" + apache_user: "www-data" + iptables__cmd: "/sbin/iptables" + + # Overrides for other roles + ifupdown_external_interface: "eth1" + ifupdown_internal_interface: "eth0" + nginx_sites_available_dir: "{{ provision__sites_available_dir }}" + nginx_sites_enabled_dir: "{{ provision__sites_enabled_dir }}" + common_web_user: "www-data" + EDXAPP_LMS_NGINX_PORT: '81' + + # CubieTruck specific + ifupdown: True + ifupdown_ignore_networkmanager: True + ifupdown_external_interface: "eth0" + ifupdown_internal_interface: "wlan0" + ifupdown_interfaces: + - iface: "{{ ifupdown_external_interface }}" + inet: "dhcp" + - iface: "{{ ifupdown_internal_interface }}" + inet: "static" + options: | + address 10.0.0.1 + netmask 255.0.0.0 + + # Tell playbooks to assume edx is pre-installed + # this changes what our options are for + # (re-)configuring it. + edx__pre_installed: true + provision__sites_available_dir: "/edx/app/nginx/sites-available/" + provision__sites_enabled_dir: "/edx/app/nginx/sites-enabled/" + php__fpm_url: "unix:/var/run/php5-fpm.sock" + portal__auth: "agreement" diff --git a/playbooks/group_vars/all b/playbooks/group_vars/all deleted file mode 100644 index 51d8f6dd..00000000 --- a/playbooks/group_vars/all +++ /dev/null @@ -1,26 +0,0 @@ ---- -## -## Ths file contains defaults used by all configurations -## -provision__base_dir: "/usr/local/tunapanda" -provision__data_dir: "{{ provision__base_dir }}/data" -provision__ext_dir: "{{ provision__base_dir }}/provision/ext" -provision__default_packages: [ git, vim, screen ] -provision__sites_available_dir: "/etc/nginx/sites-available" -provision__sites_enabled_dir: "/etc/nginx/sites-enabled" - -# TODO: split these off into roles? -apache_dir: "/etc/apache2" -apache_docroot: "/var/www" -apache_user: "www-data" -iptables__cmd: "/sbin/iptables" - -# Overrides for other roles -ifupdown_external_interface: "eth1" -ifupdown_internal_interface: "eth0" -nginx_sites_available_dir: "{{ provision__sites_available_dir }}" -nginx_sites_enabled_dir: "{{ provision__sites_enabled_dir }}" -common_web_user: "www-data" -EDXAPP_LMS_NGINX_PORT: '81' - - diff --git a/playbooks/group_vars/cubietruck b/playbooks/group_vars/cubietruck deleted file mode 100644 index af390ab3..00000000 --- a/playbooks/group_vars/cubietruck +++ /dev/null @@ -1,32 +0,0 @@ ---- -## -## This file contains settings for a standalone ARM device that -## serves as a wireless access point and has edX pre-installed -## -ifupdown: True -ifupdown_ignore_networkmanager: True -ifupdown_external_interface: "eth0" -ifupdown_internal_interface: "wlan0" -ifupdown_interfaces: - - iface: "{{ ifupdown_external_interface }}" - inet: "dhcp" - - iface: "{{ ifupdown_internal_interface }}" - inet: "static" - options: | - address 10.0.0.1 - netmask 255.0.0.0 - -wap__enabled: true -portal__enabled: true -vidtest__enabled: true -edx_portal__enabled: true -kalite__enabled: true - -# Tell playbooks to assume edx is pre-installed -# this changes what our options are for -# (re-)configuring it. -edx__pre_installed: true -provision__sites_available_dir: "/edx/app/nginx/sites-available/" -provision__sites_enabled_dir: "/edx/app/nginx/sites-enabled/" -php__fpm_url: "unix:/var/run/php5-fpm.sock" -portal__auth: "agreement" diff --git a/playbooks/group_vars/tunapanda_server b/playbooks/group_vars/tunapanda_server deleted file mode 100644 index 7081f83e..00000000 --- a/playbooks/group_vars/tunapanda_server +++ /dev/null @@ -1,26 +0,0 @@ ---- -## -## This file contains settings for a standalone classroom server -## It assumes that the server has a classroom LAN on the primary -## ethernet card, and (optionally) an Internet connection on the -## secondary card. -## - -# Network setup -ifupdown_internal_interface: eth0 -portal__auth: "auto" -portal__redirect: "{{ ansible_eth0 }}" -ifupdown: True -ifupdown_ignore_networkmanager: True -ifupdown_interfaces: - - iface: "{{ ifupdown_internal_interface }}" - inet: 'static' - options: | - address "10.0.0.1" - netmask "255.0.0.0" - -# Enabled roles -portal__enabled: true -#vidtest__enabled: true -#kalite__enabled: true - diff --git a/playbooks/main.yml b/playbooks/main.yml deleted file mode 100644 index b40b915c..00000000 --- a/playbooks/main.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -- name: Initiial timestamp - hosts: all - # TODO: Should this go elsewhere? - handlers: - - name: reload nginx - service: name=nginx state=reloaded - - tasks: - - shell: echo "Last provisioning started at $(date)" > {{ provision__base_dir }}/provisioning.txt - -- name: cubietruck ethernet setup - hosts: cubietruck - tasks: - - name: Configure wlan driver - lineinfile: - dest=/etc/modules - line="bcmdhd op_mode=2" - regexp="^bcmdhd" - - - name: Load wlan driver - command: modprobe bcmdhd - ignore_errors: yes - -- name: Base Setup - hosts: all - roles: - - provision_base - -- name: Supporting roles - hosts: all - - tasks: - - name: Install nginx - apt: - name=nginx - state=installed - - include: roles.yml - -- name: Closing timestamp - hosts: all - tasks: - - shell: echo "Last provisioning completed $(date)" >> {{ provision__base_dir }}/provisioning.txt diff --git a/playbooks/roles/apt_basic/defaults/main.yml b/playbooks/roles/apt_basic/defaults/main.yml index 739ded10..e4b46bdc 100644 --- a/playbooks/roles/apt_basic/defaults/main.yml +++ b/playbooks/roles/apt_basic/defaults/main.yml @@ -1,3 +1,2 @@ --- -apt_basic__enabled: false apt_basic__upgrade_packages: false diff --git a/playbooks/roles/apt_localrepo/defaults/main.yml b/playbooks/roles/apt_localrepo/defaults/main.yml deleted file mode 100644 index 0e90631c..00000000 --- a/playbooks/roles/apt_localrepo/defaults/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -# TODO: Probably going to deprecate this role... -apt_localrepo__enabled: false diff --git a/playbooks/roles/apt_localrepo/tasks/main.yml b/playbooks/roles/apt_localrepo/tasks/main.yml index 77f06761..68b13942 100644 --- a/playbooks/roles/apt_localrepo/tasks/main.yml +++ b/playbooks/roles/apt_localrepo/tasks/main.yml @@ -2,10 +2,10 @@ apt: name={{ item }} state=latest with_items: - dpkg-dev - - rubygems - - ruby-dev - - gcc - - devscripts + - rubygems + - ruby-dev + - gcc + - devscripts - name: "Install local repo dependencies (gems)" # TODO: Why doesn't this work? # gem: name=fpm state=latest user_install=true @@ -13,10 +13,10 @@ - name: Build local packages shell: "echo 'OUTPUT_DIR=../../packages' > build_settings_local.d/output_dir.conf ; ./build.sh */ chdir={{ pkg_build_dir }}" - name: Move built packages to repo - shell: 'cp -v {{ pkg_build_dir }}/Packages/*.deb {{ provision__base_dir }}/packages/' + shell: 'cp -v {{ pkg_build_dir }}/Packages/*.deb {{ provision__base_dir }}/packages/' - name: Populate local repo shell: '[ "$(ls -tr | tail -n1)" = "Packages.gz" ] || (dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz) chdir={{ provision__base_dir }}/packages' - name: Add local repo to apt sources - apt_repository: repo="deb file:/usr/local/tunapanda/packages ./" state=present + apt_repository: repo="deb file:/opt/tunapanda/packages ./" state=present - name: Update the apt cache unless it was just updated apt: update_cache=yes cache_valid_time=10 diff --git a/playbooks/roles/build_iso/defaults/main.yml b/playbooks/roles/build_iso/defaults/main.yml index e90aef27..1451843d 100644 --- a/playbooks/roles/build_iso/defaults/main.yml +++ b/playbooks/roles/build_iso/defaults/main.yml @@ -1,3 +1,2 @@ --- -build_iso__enabled: false build_iso__remastersys_root: "{{ vagrant_share }}/data/build/remastersys" diff --git a/playbooks/roles/build_iso/tasks/main.yml b/playbooks/roles/build_iso/tasks/main.yml index 0e5a3b32..064337a0 100644 --- a/playbooks/roles/build_iso/tasks/main.yml +++ b/playbooks/roles/build_iso/tasks/main.yml @@ -1,11 +1,11 @@ --- - name: Install Casper - apt: - name=casper + apt: + name=casper state=latest update_cache=yes cache_valid_time=600 - + - name: "Build ISO (this will take a while!)" command: "{{ build_iso__remastersys_root }}/bin/remastersys backup" sudo: yes diff --git a/playbooks/roles/cubietruck_net/tasks/main.yml b/playbooks/roles/cubietruck_net/tasks/main.yml new file mode 100644 index 00000000..9a075293 --- /dev/null +++ b/playbooks/roles/cubietruck_net/tasks/main.yml @@ -0,0 +1,10 @@ +--- +- name: Configure wlan driver + lineinfile: + dest=/etc/modules + line="bcmdhd op_mode=2" + regexp="^bcmdhd" + +- name: Load wlan driver + command: modprobe bcmdhd + ignore_errors: yes diff --git a/playbooks/roles/desktop/defaults/main.yml b/playbooks/roles/desktop/defaults/main.yml index c1691054..dec97709 100644 --- a/playbooks/roles/desktop/defaults/main.yml +++ b/playbooks/roles/desktop/defaults/main.yml @@ -1,4 +1,3 @@ --- -desktop__enabled: false desktop__use_gnome2: true desktop__custom_artwork: false diff --git a/playbooks/roles/desktop/tasks/artwork.yml b/playbooks/roles/desktop/tasks/artwork.yml index 25b2eaa4..3c53b237 100644 --- a/playbooks/roles/desktop/tasks/artwork.yml +++ b/playbooks/roles/desktop/tasks/artwork.yml @@ -1,10 +1,10 @@ --- - name: Install custom artwork - synchronize: - src=fs/ + synchronize: + src=fs/ dest=/ rsync_path="sudo rsync" - + - name: Configuring users to use custom artwork by default - script: scripts/artwork-post-install.sh + script: scripts/artwork-post-install.sh creates=/tmp/COMPLETED_artwork-post-install diff --git a/playbooks/roles/desktop/tasks/main.yml b/playbooks/roles/desktop/tasks/main.yml index f8db97ff..cff97b39 100644 --- a/playbooks/roles/desktop/tasks/main.yml +++ b/playbooks/roles/desktop/tasks/main.yml @@ -9,6 +9,6 @@ when: desktop__use_gnome2 - name: Start GUI service: name=lightdm state=started - + - include: artwork.yml when: desktop__custom_artwork diff --git a/playbooks/roles/dhcpd/tasks/main.yml b/playbooks/roles/dhcpd/tasks/main.yml index 52212d8e..71382393 100644 --- a/playbooks/roles/dhcpd/tasks/main.yml +++ b/playbooks/roles/dhcpd/tasks/main.yml @@ -1,12 +1,12 @@ --- - name: Install dhcpd apt: - name=isc-dhcp-server + name=isc-dhcp-server state=latest - name: Create dhcpd config - template: + template: src=dhcpd.conf.j2 dest=/etc/dhcp/dhcpd.conf notify: restart dhcpd - + diff --git a/playbooks/roles/edx_portal/defaults/main.yml b/playbooks/roles/edx_portal/defaults/main.yml index d468099d..2709d973 100644 --- a/playbooks/roles/edx_portal/defaults/main.yml +++ b/playbooks/roles/edx_portal/defaults/main.yml @@ -1,5 +1,4 @@ --- -edx_portal__enabled: false edx__lms_urlpath: "/edx" edx__lms_port: "{{ EDXAPP_LMS_NGINX_PORT }}" edx__cms_urlpath: "/edxcms" diff --git a/playbooks/roles/edx_portal/meta/main.yml b/playbooks/roles/edx_portal/meta/main.yml index 2c9c1575..e675808f 100644 --- a/playbooks/roles/edx_portal/meta/main.yml +++ b/playbooks/roles/edx_portal/meta/main.yml @@ -2,9 +2,9 @@ dependencies: - role: portal_subsite portal__subsites: - - name: "edx_lms" + - name: "edx_lms" urlpath: "{{ edx__lms_urlpath }}" port: "{{ edx__lms_port }}" - - name: "edx_cms" + - name: "edx_cms" urlpath: "{{ edx__cms_urlpath }}" port: "{{ edx__cms_port }}" diff --git a/playbooks/roles/external_data_drive/defaults/main.yml b/playbooks/roles/external_data_drive/defaults/main.yml index 20a73477..82bd811a 100644 --- a/playbooks/roles/external_data_drive/defaults/main.yml +++ b/playbooks/roles/external_data_drive/defaults/main.yml @@ -1,4 +1,3 @@ --- -external_data_drive__enabled: false external_data_drive__disklabel: "TUNAPANDA_DATA" external_data_drive__mountpoint: "{{ provision__base_dir }}/data" diff --git a/playbooks/roles/iptables/defaults/main.yml b/playbooks/roles/iptables/defaults/main.yml index 7e1323dd..ca2929dc 100644 --- a/playbooks/roles/iptables/defaults/main.yml +++ b/playbooks/roles/iptables/defaults/main.yml @@ -1,5 +1,4 @@ --- -iptables__enabled: false iptables__cmd: "/sbin/iptables" iptables__base_dir: "{{ provision__base_dir }}/data/iptables" iptables__rules_dir: "{{ iptables__base_dir }}/rules.d" diff --git a/playbooks/roles/iptables/handlers/main.yml b/playbooks/roles/iptables/handlers/main.yml index e748a6d0..8e971b46 100644 --- a/playbooks/roles/iptables/handlers/main.yml +++ b/playbooks/roles/iptables/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: reload iptables - service: + service: name=iptables state=restarted enabled=yes diff --git a/playbooks/roles/iptables/tasks/main.yml b/playbooks/roles/iptables/tasks/main.yml index 706a0cdb..3780842b 100644 --- a/playbooks/roles/iptables/tasks/main.yml +++ b/playbooks/roles/iptables/tasks/main.yml @@ -17,7 +17,7 @@ dest="{{ iptables__base_dir }}/rules.d" mode="0755" -- name: Set up iptables +- name: Set up iptables template: src={{ item }} dest="{{ iptables__base_dir }}/" diff --git a/playbooks/roles/kalite/defaults/main.yml b/playbooks/roles/kalite/defaults/main.yml index d9b22124..093ce7ae 100644 --- a/playbooks/roles/kalite/defaults/main.yml +++ b/playbooks/roles/kalite/defaults/main.yml @@ -1,5 +1,4 @@ --- -kalite__enabled: false kalite__provision__base_dir: "{{ provision__base_dir }}/data/ka-lite" kalite__user: teacher kalite__git_source: https://github.com/tunapanda/ka-lite diff --git a/playbooks/roles/kalite/tasks/main.yml b/playbooks/roles/kalite/tasks/main.yml index 0c946253..b7759130 100644 --- a/playbooks/roles/kalite/tasks/main.yml +++ b/playbooks/roles/kalite/tasks/main.yml @@ -21,7 +21,7 @@ #- name: Mounting {{ kalite__provision__base_dir }} # command: mount --bind data {{ kalite__provision__base_dir }} -# when: is_mounted|failed +# when: is_mounted|failed - name: Getting kalite code git: repo={{ kalite__git_source }} dest={{ kalite__provision__base_dir }} diff --git a/playbooks/roles/php/defaults/main.yml b/playbooks/roles/php/defaults/main.yml index 3dbf2d56..f0887959 100644 --- a/playbooks/roles/php/defaults/main.yml +++ b/playbooks/roles/php/defaults/main.yml @@ -1,5 +1,4 @@ --- # Don't install unless pulled in as a default -php__enabled: false php__fpm_url: "127.0.0.1:9000" diff --git a/playbooks/roles/portal/data/site/auth.php b/playbooks/roles/portal/data/site/auth.php index 1de518d0..23219a7c 100644 --- a/playbooks/roles/portal/data/site/auth.php +++ b/playbooks/roles/portal/data/site/auth.php @@ -28,7 +28,7 @@ function validate_auth_form() { $arp = "/usr/sbin/arp"; // The following file is used to keep track of users -$users_fn = "/usr/local/tunapanda/data/captive_portal/users"; +$users_fn = "/opt/tunapanda/data/captive_portal/users"; // Attempt to get the client mac address $mac = shell_exec("$arp -a ".$_SERVER['REMOTE_ADDR']); diff --git a/playbooks/roles/portal/defaults/main.yml b/playbooks/roles/portal/defaults/main.yml index a69cdf21..da438956 100644 --- a/playbooks/roles/portal/defaults/main.yml +++ b/playbooks/roles/portal/defaults/main.yml @@ -1,5 +1,4 @@ --- -portal__enabled: false portal__port: 80 portal__title: "x2go - Education in a box" portal__description: "

x2go is a collection of free learning materials hosted in a standalone box without requiring internet.

" @@ -10,7 +9,7 @@ portal__redirects: "{{ portal__base }}/subsites.d" portal__users: "{{ portal__base }}/authorized_clients" portal__capture_chain: "captive" # TODO figure out a way to get IP from ifupdown_external_interface -portal__redirect: "{{ ansible_wlan0 }}" +portal__redirect: "{{ ansible_wlan0 }}" portal__auth: "none" portal__auth_agreement_text: |

By clicking this button, you agree to not be a jerk on the Internet.
diff --git a/playbooks/roles/portal/handlers/main.yml b/playbooks/roles/portal/handlers/main.yml new file mode 100644 index 00000000..81b7f6b7 --- /dev/null +++ b/playbooks/roles/portal/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: restart nginx + service: name=nginx state=restarted + +- name: reload nginx + service: name=nginx state=reloaded diff --git a/playbooks/roles/portal/meta/main.yml b/playbooks/roles/portal/meta/main.yml index d366b84e..114651b9 100644 --- a/playbooks/roles/portal/meta/main.yml +++ b/playbooks/roles/portal/meta/main.yml @@ -1,5 +1,5 @@ --- dependencies: - bind - - php - - iptables + - php + - iptables diff --git a/playbooks/roles/portal/tasks/auto_auth.yml b/playbooks/roles/portal/tasks/auto_auth.yml index 3619f450..7f43a662 100644 --- a/playbooks/roles/portal/tasks/auto_auth.yml +++ b/playbooks/roles/portal/tasks/auto_auth.yml @@ -16,7 +16,7 @@ src="site/auto_auth.php.j2" dest="{{ portal__docroot }}/auth.php" -- name: Creating portal users list +- name: Creating portal users list file: path="{{ portal__users }}" state="touch" diff --git a/playbooks/roles/portal/tasks/captive.yml b/playbooks/roles/portal/tasks/captive.yml index d265ee6f..f1f293db 100644 --- a/playbooks/roles/portal/tasks/captive.yml +++ b/playbooks/roles/portal/tasks/captive.yml @@ -11,9 +11,9 @@ notify: - reload iptables -- name: Creating portal users list +- name: Creating portal users list file: path={{ portal__users }} state=touch mode=644 - owner={{ apache_user }} + owner={{ apache_user }} diff --git a/playbooks/roles/portal/tasks/main.yml b/playbooks/roles/portal/tasks/main.yml index e5272623..54da50ff 100644 --- a/playbooks/roles/portal/tasks/main.yml +++ b/playbooks/roles/portal/tasks/main.yml @@ -16,7 +16,7 @@ state=stopped ignore_errors: yes -- name: Enable Nginx +- name: Enable Nginx service: name=nginx state=started @@ -35,18 +35,18 @@ # TODO: This is an ugly hack. There's probably a better way. - name: Changing default edx lms port lineinfile: - dest=/edx/app/nginx/sites-available/lms - regexp='^(\s*)listen' - backrefs=yes + dest=/edx/app/nginx/sites-available/lms + regexp='^(\s*)listen' + backrefs=yes line='\1listen {{ EDXAPP_LMS_NGINX_PORT }} default;' state=present when: edx__pre_installed is defined and edx__pre_installed - name: Create site content dirs - file: + file: path={{ item }} state=directory - owner=root group={{ common_web_user }} mode=775 + owner=root group={{ common_web_user }} mode=775 with_items: - "{{ portal__redirects }}" diff --git a/playbooks/roles/portal_subsite/tasks/main.yml b/playbooks/roles/portal_subsite/tasks/main.yml index 8ea3ebbb..f7eb30fd 100644 --- a/playbooks/roles/portal_subsite/tasks/main.yml +++ b/playbooks/roles/portal_subsite/tasks/main.yml @@ -1,6 +1,6 @@ --- - shell: echo "{{ portal__subsites }}" | tee /tmp/subsites - + - name: Deploy subsite redirect instructions template: src=nginx_portal_redirect.j2 diff --git a/playbooks/roles/provision_base/defaults/main.yml b/playbooks/roles/provision_base/defaults/main.yml index 2c67b8cb..a6e04ed8 100644 --- a/playbooks/roles/provision_base/defaults/main.yml +++ b/playbooks/roles/provision_base/defaults/main.yml @@ -1,6 +1,13 @@ --- -provision_base__enabled: true -provision__base_dir: "/usr/local/tunapanda" +# TODO: split-off some of these into other roles +provision__base_dir: "/opt/tunapanda" +provision__data_dir: "{{ provision__base_dir }}/data" +provision__ext_dir: "{{ provision__base_dir }}/provision/ext" +provision__default_packages: [ git, vim, screen ] +provision__sites_available_dir: "/etc/nginx/sites-available" +provision__sites_enabled_dir: "/etc/nginx/sites-enabled" + apache_user: "www-data" apache_dir: "/etc/apache2" apache_docroot: "/var/www" +common_web_user: "www-data" diff --git a/playbooks/roles/provision_base/tasks/main.yml b/playbooks/roles/provision_base/tasks/main.yml index 3da0140c..a40cdc38 100644 --- a/playbooks/roles/provision_base/tasks/main.yml +++ b/playbooks/roles/provision_base/tasks/main.yml @@ -1,6 +1,6 @@ --- - name: "Installing basic packages" - apt: - name="{{ item }}" + apt: + name="{{ item }}" state="present" with_items: provision__default_packages diff --git a/playbooks/roles/users/defaults/main.yml b/playbooks/roles/users/defaults/main.yml index dd192a44..6b3a3788 100644 --- a/playbooks/roles/users/defaults/main.yml +++ b/playbooks/roles/users/defaults/main.yml @@ -1,4 +1,3 @@ --- -users__enabled: false users__num_students: 20 users__force_student_pw_change: false diff --git a/playbooks/roles/vidtest/defaults/main.yml b/playbooks/roles/vidtest/defaults/main.yml index 15daae65..1e29b90b 100644 --- a/playbooks/roles/vidtest/defaults/main.yml +++ b/playbooks/roles/vidtest/defaults/main.yml @@ -1,5 +1,4 @@ --- - vidtest__enabled: false - vidtest__docroot: "{{ provision__base_dir }}/provision/playbooks/roles/vidtest/data/site" - vidtest__urlpath: "/vidtest" - vidtest__port: 8901 +vidtest__docroot: "{{ provision__base_dir }}/provision/playbooks/roles/vidtest/data/site" +vidtest__urlpath: "/vidtest" +vidtest__port: 8901 diff --git a/playbooks/roles/vidtest/meta/main.yml b/playbooks/roles/vidtest/meta/main.yml index 939e6b93..589395fd 100644 --- a/playbooks/roles/vidtest/meta/main.yml +++ b/playbooks/roles/vidtest/meta/main.yml @@ -2,7 +2,7 @@ dependencies: - role: portal_subsite portal__subsites: - - name: "videotest" + - name: "videotest" docroot: "{{ vidtest__docroot }}" urlpath: "{{ vidtest__urlpath }}" #port: "{{ vidtest__port }}" diff --git a/playbooks/roles/vidtest/tasks/main.yml b/playbooks/roles/vidtest/tasks/main.yml index 20c7e1a1..af1757fe 100644 --- a/playbooks/roles/vidtest/tasks/main.yml +++ b/playbooks/roles/vidtest/tasks/main.yml @@ -3,5 +3,5 @@ # template: > # src=site/index.html.j2 # dest={{ vidtest__docroot }}/index.html - - + + diff --git a/playbooks/roles/vidtest/templates/conf/vidtest.j2 b/playbooks/roles/vidtest/templates/conf/vidtest.j2 index 62333a40..51f9e64b 100644 --- a/playbooks/roles/vidtest/templates/conf/vidtest.j2 +++ b/playbooks/roles/vidtest/templates/conf/vidtest.j2 @@ -21,7 +21,7 @@ server { listen 80; listen [::]:80 default_server ipv6only=on; - root /usr/local/tunapanda/data/vidtest; + root {{ provision__base_dir }}/data/vidtest; index index.html index.htm; # Make site accessible from http://localhost/ @@ -44,7 +44,7 @@ server { } location ~ /video/.*(\..*) { - alias /usr/local/tunapanda/data/vidtest/test$1; + alias {{ provision__base_dir }}/data/vidtest/test$1; } location ~ \.php$ { diff --git a/playbooks/roles/wap/defaults/main.yml b/playbooks/roles/wap/defaults/main.yml index c29fae00..79949210 100644 --- a/playbooks/roles/wap/defaults/main.yml +++ b/playbooks/roles/wap/defaults/main.yml @@ -1,4 +1,3 @@ --- -wap__enabled: false wap__data_ssid: "x2go" wap__data_domain: "x2go.org" diff --git a/playbooks/roles/wap/tasks/main.yml b/playbooks/roles/wap/tasks/main.yml index 73bae253..73f546ee 100644 --- a/playbooks/roles/wap/tasks/main.yml +++ b/playbooks/roles/wap/tasks/main.yml @@ -13,7 +13,7 @@ backup=yes - name: set hostapd to use config file - lineinfile: + lineinfile: dest=/etc/default/hostapd regexp="^DAEMON_CONF=.*" line="DAEMON_CONF=/etc/hostapd.conf" @@ -27,6 +27,6 @@ notify: reload iptables - name: Hostapd should be running - service: + service: name=hostapd state=started diff --git a/playbooks/roles/wikipedia/data/notfound.html b/playbooks/roles/wikipedia/data/notfound.html index 999ac06f..02b3ac4f 100644 --- a/playbooks/roles/wikipedia/data/notfound.html +++ b/playbooks/roles/wikipedia/data/notfound.html @@ -13,4 +13,4 @@

Wikipedia content not found
-Either you are searching for something that is not in the WikipediaForSchools collection, or you have not installed the WikipediaForSchools content. In that case, you will need to download the content archive and extract it into /usr/local/tunapanda/data/wikipediaforschools/ +Either you are searching for something that is not in the WikipediaForSchools collection, or you have not installed the WikipediaForSchools content. In that case, you will need to download the content archive and extract it into /opt/tunapanda/data/wikipediaforschools/ diff --git a/playbooks/roles/wikipedia/defaults/main.yml b/playbooks/roles/wikipedia/defaults/main.yml index 23b40931..9927fbe3 100644 --- a/playbooks/roles/wikipedia/defaults/main.yml +++ b/playbooks/roles/wikipedia/defaults/main.yml @@ -1,4 +1,3 @@ --- apache_user: "www-data" -wikipedia__enabled: false wikipedia__provision__base_dir: "{{ provision__base_dir }}/data/wikipedia" diff --git a/playbooks/roles/wikipedia/tasks/main.yml b/playbooks/roles/wikipedia/tasks/main.yml index b35591a8..13f1157b 100644 --- a/playbooks/roles/wikipedia/tasks/main.yml +++ b/playbooks/roles/wikipedia/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: Ensuring that Apache is installed - apt: - name=apache2 + apt: + name=apache2 state=latest update_cache=yes cache_valid_time=600 @@ -13,8 +13,8 @@ - speling - name: Add wikipedia aliases to /etc/hosts - lineinfile: - dest=/etc/hosts + lineinfile: + dest=/etc/hosts line="127.0.0.1 wikipedia www.wikipedia.org en.wikipedia.org wikipedia.org" regexp="^[^#].*wikipedia.org.*" #- name: Install tunapanda-wikipedia @@ -25,8 +25,8 @@ dest="{{ apache_dir }}/sites-available/tunapanda-wikipedia" - name: Linking Apache config - file: - src: "{{ apache_dir }}/sites-available/tunapanda-wikipedia" + file: + src: "{{ apache_dir }}/sites-available/tunapanda-wikipedia" path: "{{ apache_dir }}/sites-enabled/tunapanda-wikipedia" state: link notify: @@ -44,11 +44,11 @@ dest="{{ wikipedia__provision__base_dir }}/notfound.html" - name: Linking Apache document root - file: - src: "{{ wikipedia__provision__base_dir }}" + file: + src: "{{ wikipedia__provision__base_dir }}" path: "{{ apache_docroot }}/wikipedia" state: link - + - name: Creating data dir {{ wikipedia__provision__base_dir }} file: path={{ wikipedia__provision__base_dir }} state=directory @@ -56,7 +56,7 @@ shell: mount | grep {{ wikipedia__provision__base_dir }} register: is_mounted ignore_errors: True - + #- name: Mounting {{ wikipedia__provision__base_dir }} # command: mount --bind {{ vagrant_share }}/playbooks/roles/wikipedia/data {{ wikipedia__provision__base_dir }} # when: is_mounted|failed diff --git a/playbooks/tunapanda_server.yml b/playbooks/tunapanda_server.yml new file mode 100644 index 00000000..a9a82b5c --- /dev/null +++ b/playbooks/tunapanda_server.yml @@ -0,0 +1,56 @@ +--- +## +## This file contains settings for a standalone classroom server +## It assumes that the server has a classroom LAN on the primary +## ethernet card, and (optionally) an Internet connection on the +## secondary card. +## +- hosts: all + pre_tasks: + - shell: echo "Last provisioning started at $(date)" > {{ provision__base_dir }}/provisioning.txt + post_tasks: + - shell: echo "Last provisioning completed at $(date)" >> {{ provision__base_dir }}/provisioning.txt + + roles: + - role: debops.ifupdown + - role: provision_base + #- role: kalite + #- role: vidtest + - role: portal + + vars: + # Common vars + provision__base_dir: "/opt/tunapanda" + provision__data_dir: "{{ provision__base_dir }}/data" + provision__ext_dir: "{{ provision__base_dir }}/provision/ext" + provision__default_packages: [ git, vim, screen ] + provision__sites_available_dir: "/etc/nginx/sites-available" + provision__sites_enabled_dir: "/etc/nginx/sites-enabled" + + # TODO: split these off into roles? + apache_dir: "/etc/apache2" + apache_docroot: "/var/www" + apache_user: "www-data" + iptables__cmd: "/sbin/iptables" + + # Overrides for other roles + ifupdown_external_interface: "eth1" + ifupdown_internal_interface: "eth0" + nginx_sites_available_dir: "{{ provision__sites_available_dir }}" + nginx_sites_enabled_dir: "{{ provision__sites_enabled_dir }}" + common_web_user: "www-data" + EDXAPP_LMS_NGINX_PORT: '81' + + # Tunepanda server specific + # Network setup + ifupdown_internal_interface: eth0 + portal__auth: "auto" + portal__redirect: "{{ ansible_eth0 }}" + ifupdown: True + ifupdown_ignore_networkmanager: True + ifupdown_interfaces: + - iface: "{{ ifupdown_internal_interface }}" + inet: 'static' + options: | + address "10.0.0.1" + netmask "255.0.0.0" diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 00456f3d..d6261686 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -22,7 +22,7 @@ function step() { ## Configs # All of these can be overridden by setting them as environment vars PROVISION_AUTO_UPDATE=${PROVISION_AUTO_UPDATE:-true} -PROVISION_BASE_DIR=${PROVISION_BASE_DIR:-"/usr/local/tunapanda"} +PROVISION_BASE_DIR=${PROVISION_BASE_DIR:-"/opt/tunapanda"} ## TODO: Change usernamenumber URLs back to tunapanda PROVISION_CORE_REPO=${PROVISION_CORE_REPO:-"http://github.com/usernamenumber/provision"} PROVISION_CORE_DIR=${PROVISION_CORE_DIR:-"${PROVISION_BASE_DIR}/provision"} diff --git a/scripts/genFullPlaybook.sh b/scripts/genFullPlaybook.sh new file mode 100755 index 00000000..0b3309c6 --- /dev/null +++ b/scripts/genFullPlaybook.sh @@ -0,0 +1,32 @@ +#!/bin/bash +cat > fullPlaybook.yml < {{ provision__base_dir }}/provisioning.txt + post_tasks: + - shell: echo "Last provisioning completed at \$(date)" >> {{ provision__base_dir }}/provisioning.txt + + roles: +EOF + +for r in $(find roles/ -maxdepth 1 -mindepth 1 -type d) + do + f=$(basename $r); + echo " - role: $f" >> fullPlaybook.yml +done + +echo "" >> fullPlaybook.yml +echo " vars:" >> fullPlaybook.yml + +(for r in $(ls roles/) ; + do + if [ -f roles/$r/defaults/main.yml ]; + then echo "" ; + echo " ## $r role" ; + cat roles/$r/defaults/main.yml | grep -v '^---' | grep -v '^[[:space:]]*$' | sed 's,^, ,'; + fi + done) >> fullPlaybook.yml diff --git a/scripts/inventory.py b/scripts/inventory.py deleted file mode 100755 index 452d79d7..00000000 --- a/scripts/inventory.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/python -# -# Dynamic inventory for single-server deployments. See docs for details: -# http://docs.ansible.com/developing_inventory.html -# - -import platform -import argparse -import json -import os -import sys -import yaml - -# Error codes -EBADFILE = 1 - -# Configurables -basedir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + "/..") -localconfig_fn = basedir + "/localconfig.yml" - -# --help system -parser = argparse.ArgumentParser(description='Custom Ansible inventory generator') -parser.add_argument("--list", action="store_true", default=False) -parser.add_argument("--host", nargs="?", default=False) - -# Check for a local configuration -list_output = {} -host_output = {} -if os.path.exists(localconfig_fn): - try: - localconfig = yaml.load(open(localconfig_fn,"r").read()) - except Exception, e: - sys.stderr.write("WARNING: Could not parse %s. Error text was '%s'\n" % (localconfig_fn,e)) - sys.exit(EBADFILE) - else: - if localconfig.has_key("groups"): - for group in localconfig["groups"]: - if group == "default": - continue - list_output[group] = { "hosts": [ "127.0.0.1" ] } - - if localconfig.has_key("vars"): - host_output.update(localconfig["vars"]) - -# Defaults and best guesses... -if len(list_output) == 0: - # If no explicit groups are given, - # naively assume that any ARM machine - # counts as a Cubietruck for provisioning - if "arm" in platform.machine(): - default_group = "cubietruck" - else: - default_group = "default" - list_output = { default_group : { "hosts" : [ "127.0.0.1" ] } } - -# Do the deed -args = parser.parse_args() -if args.list: - print json.dumps(list_output, indent=2) -elif args.host: - print json.dumps(host_output, indent=2) diff --git a/playbooks/roles/mkrole.sh b/scripts/mkrole.sh similarity index 100% rename from playbooks/roles/mkrole.sh rename to scripts/mkrole.sh