Commit 1f4c8404 by Ned Batchelder Committed by GitHub

Merge pull request #3484 from edx/ned/cleaner-vagrantfile-overrides

Make Vagrantfiles less hard-coded, and more uniformly configurable
parents ffc253f1 053d8f25
#!/bin/sh #!/bin/bash
## ##
## Installs the pre-requisites for running edX on a single Ubuntu 12.04 ## Installs the pre-requisites for running edX on a single Ubuntu 12.04
## instance. This script is provided as a convenience and any of these ## instance. This script is provided as a convenience and any of these
...@@ -42,22 +42,34 @@ sudo -H pip install --upgrade virtualenv==15.0.2 ...@@ -42,22 +42,34 @@ sudo -H pip install --upgrade virtualenv==15.0.2
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
## Did we specify an openedx release? ##
if [ -n "$OPENEDX_RELEASE" ]; then ## Overridable version variables in the playbooks. Each can be overridden
EXTRA_VARS="-e edx_platform_version=$OPENEDX_RELEASE \ ## individually, or with $OPENEDX_RELEASE.
-e certs_version=$OPENEDX_RELEASE \ ##
-e forum_version=$OPENEDX_RELEASE \ VERSION_VARS=(
-e xqueue_version=$OPENEDX_RELEASE \ edx_platform_version
-e configuration_version=$OPENEDX_RELEASE \ certs_version
-e demo_version=$OPENEDX_RELEASE \ forum_version
-e NOTIFIER_VERSION=$OPENEDX_RELEASE \ xqueue_version
-e INSIGHTS_VERSION=$OPENEDX_RELEASE \ configuration_version
-e ANALYTICS_API_VERSION=$OPENEDX_RELEASE \ demo_version
$EXTRA_VARS" NOTIFIER_VERSION
CONFIG_VER=$OPENEDX_RELEASE INSIGHTS_VERSION
else ANALYTICS_API_VERSION
CONFIG_VER="master" )
fi
EXTRA_VARS=""
for var in ${VERSION_VARS[@]}; do
# Each variable can be overridden by a similarly-named environment variable,
# or OPENEDX_RELEASE, if provided.
ENV_VAR=$(echo $var | tr '[:lower:]' '[:upper:]')
eval override=\${$ENV_VAR-\$OPENEDX_RELEASE}
if [ -n "$override" ]; then
EXTRA_VARS="-e $var=$override $EXTRA_VARS"
fi
done
CONFIGURATION_VERSION=${CONFIGURATION_VERSION-${OPENEDX_RELEASE-master}}
## ##
## Clone the configuration repository and run Ansible ## Clone the configuration repository and run Ansible
...@@ -65,7 +77,7 @@ fi ...@@ -65,7 +77,7 @@ fi
cd /var/tmp cd /var/tmp
git clone https://github.com/edx/configuration git clone https://github.com/edx/configuration
cd configuration cd configuration
git checkout $CONFIG_VER git checkout $CONFIGURATION_VERSION
## ##
## Install the ansible requirements ## Install the ansible requirements
......
...@@ -13,6 +13,22 @@ if ENV["VAGRANT_GUEST_IP"] ...@@ -13,6 +13,22 @@ if ENV["VAGRANT_GUEST_IP"]
vm_guest_ip = ENV["VAGRANT_GUEST_IP"] vm_guest_ip = ENV["VAGRANT_GUEST_IP"]
end end
# These are versioning variables in the roles. Each can be overridden, first
# with OPENEDX_RELEASE, and then with a specific environment variable of the
# same name but upper-cased.
VERSION_VARS = [
'edx_platform_version',
'configuration_version',
'certs_version',
'forum_version',
'xqueue_version',
'demo_version',
'NOTIFIER_VERSION',
'ECOMMERCE_VERSION',
'ECOMMERCE_WORKER_VERSION',
'PROGRAMS_VERSION',
]
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Creates a devstack from a base Ubuntu 12.04 image for virtualbox # Creates a devstack from a base Ubuntu 12.04 image for virtualbox
...@@ -70,34 +86,15 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ...@@ -70,34 +86,15 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
ansible.verbose = "vvvv" ansible.verbose = "vvvv"
ansible.extra_vars = {} ansible.extra_vars = {}
if ENV['OPENEDX_RELEASE'] VERSION_VARS.each do |var|
ansible.extra_vars = { if ENV['OPENEDX_RELEASE']
edx_platform_version: ENV['OPENEDX_RELEASE'], ansible.extra_vars[var] = ENV['OPENEDX_RELEASE']
configuration_version: ENV['OPENEDX_RELEASE'], end
certs_version: ENV['OPENEDX_RELEASE'], env_var = var.upcase
forum_version: ENV['OPENEDX_RELEASE'], if ENV[env_var]
xqueue_version: ENV['OPENEDX_RELEASE'], ansible.extra_vars[var] = ENV[env_var]
demo_version: ENV['OPENEDX_RELEASE'], end
NOTIFIER_VERSION: ENV['OPENEDX_RELEASE'],
ECOMMERCE_VERSION: ENV['OPENEDX_RELEASE'],
ECOMMERCE_WORKER_VERSION: ENV['OPENEDX_RELEASE'],
PROGRAMS_VERSION: ENV['OPENEDX_RELEASE'],
}
end
if ENV['CONFIGURATION_VERSION']
ansible.extra_vars['configuration_version'] = ENV['CONFIGURATION_VERSION']
end
if ENV['EDX_PLATFORM_VERSION']
ansible.extra_vars['edx_platform_version'] = ENV['EDX_PLATFORM_VERSION']
end
if ENV['ECOMMERCE_VERSION']
ansible.extra_vars['ECOMMERCE_VERSION'] = ENV['ECOMMERCE_VERSION']
end
if ENV['ECOMMERCE_WORKER_VERSION']
ansible.extra_vars['ECOMMERCE_WORKER_VERSION'] = ENV['ECOMMERCE_WORKER_VERSION']
end
if ENV['PROGRAMS_VERSION']
ansible.extra_vars['PROGRAMS_VERSION'] = ENV['PROGRAMS_VERSION']
end end
end end
end end
...@@ -8,37 +8,21 @@ VAGRANTFILE_API_VERSION = "2" ...@@ -8,37 +8,21 @@ VAGRANTFILE_API_VERSION = "2"
MEMORY = 4096 MEMORY = 4096
CPU_COUNT = 2 CPU_COUNT = 2
$script = <<SCRIPT # These are versioning variables in the roles. Each can be overridden, first
if [ ! -d /edx/app/edx_ansible ]; then # with OPENEDX_RELEASE, and then with a specific environment variable of the
echo "Error: Base box is missing provisioning scripts." 1>&2 # same name but upper-cased.
exit 1 VERSION_VARS = [
fi 'edx_platform_version',
OPENEDX_RELEASE=$1 'configuration_version',
export PYTHONUNBUFFERED=1 'certs_version',
source /edx/app/edx_ansible/venvs/edx_ansible/bin/activate 'forum_version',
cd /edx/app/edx_ansible/edx_ansible/playbooks 'xqueue_version',
'demo_version',
# Did we specify an openedx release? 'NOTIFIER_VERSION',
if [ -n "$OPENEDX_RELEASE" ]; then 'ECOMMERCE_VERSION',
EXTRA_VARS="-e edx_platform_version=$OPENEDX_RELEASE \ 'ECOMMERCE_WORKER_VERSION',
-e certs_version=$OPENEDX_RELEASE \ 'PROGRAMS_VERSION',
-e forum_version=$OPENEDX_RELEASE \ ]
-e xqueue_version=$OPENEDX_RELEASE \
-e demo_version=$OPENEDX_RELEASE \
-e NOTIFIER_VERSION=$OPENEDX_RELEASE \
-e ECOMMERCE_VERSION=$OPENEDX_RELEASE \
-e ECOMMERCE_WORKER_VERSION=$OPENEDX_RELEASE \
-e PROGRAMS_VERSION=$OPENEDX_RELEASE \
"
CONFIG_VER=$OPENEDX_RELEASE
else
CONFIG_VER="master"
fi
ansible-playbook -i localhost, -c local run_role.yml -e role=edx_ansible -e configuration_version=$CONFIG_VER $EXTRA_VARS
ansible-playbook -i localhost, -c local vagrant-devstack.yml -e configuration_version=$CONFIG_VER $EXTRA_VARS
SCRIPT
MOUNT_DIRS = { MOUNT_DIRS = {
:edx_platform => {:repo => "edx-platform", :local => "/edx/app/edxapp/edx-platform", :owner => "edxapp"}, :edx_platform => {:repo => "edx-platform", :local => "/edx/app/edxapp/edx-platform", :owner => "edxapp"},
...@@ -82,14 +66,40 @@ openedx_releases = { ...@@ -82,14 +66,40 @@ openedx_releases = {
} }
openedx_releases.default = "eucalyptus-devstack-2016-09-01" openedx_releases.default = "eucalyptus-devstack-2016-09-01"
rel = ENV['OPENEDX_RELEASE'] openedx_release = ENV['OPENEDX_RELEASE']
# Build -e override lines for each overridable variable.
extra_vars_lines = ""
VERSION_VARS.each do |var|
rel = ENV[var.upcase] || openedx_release
if rel
extra_vars_lines += "-e #{var}=#{rel} \\\n"
end
end
$script = <<SCRIPT
if [ ! -d /edx/app/edx_ansible ]; then
echo "Error: Base box is missing provisioning scripts." 1>&2
exit 1
fi
export PYTHONUNBUFFERED=1
source /edx/app/edx_ansible/venvs/edx_ansible/bin/activate
cd /edx/app/edx_ansible/edx_ansible/playbooks
EXTRA_VARS="#{extra_vars_lines}"
CONFIG_VER="#{ENV['CONFIGURATION_VERSION'] || openedx_release || 'master'}"
ansible-playbook -i localhost, -c local run_role.yml -e role=edx_ansible -e configuration_version=$CONFIG_VER $EXTRA_VARS
ansible-playbook -i localhost, -c local vagrant-devstack.yml -e configuration_version=$CONFIG_VER $EXTRA_VARS
SCRIPT
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
reldata = openedx_releases[rel] reldata = openedx_releases[openedx_release]
if Hash == reldata.class if Hash == reldata.class
boxname = openedx_releases[rel][:name] boxname = openedx_releases[openedx_release][:name]
boxfile = openedx_releases[rel].fetch(:file, "#{boxname}.box") boxfile = openedx_releases[openedx_release].fetch(:file, "#{boxname}.box")
else else
boxname = reldata boxname = reldata
boxfile = "#{boxname}.box" boxfile = "#{boxname}.box"
...@@ -153,5 +163,5 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ...@@ -153,5 +163,5 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Assume that the base box has the edx_ansible role installed # Assume that the base box has the edx_ansible role installed
# We can then tell the Vagrant instance to update itself. # We can then tell the Vagrant instance to update itself.
config.vm.provision "shell", inline: $script, args: rel config.vm.provision "shell", inline: $script
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment