chiark / gitweb /
buildserver: buildserver/Vagrantfile is configed by .yaml file
authorHans-Christoph Steiner <hans@eds.org>
Mon, 4 Jul 2016 18:49:41 +0000 (20:49 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Mon, 4 Jul 2016 21:54:52 +0000 (23:54 +0200)
Vagrantfile is now committed and not changed between configurations. It is
configed by translating the python config file's dict to a YAML file, which
Vagrantfile now loads and uses.  This makes it a lot easier for vagrant
users and python programmers to understand, and hopefully makes it easier
to maintain and test with.

.gitignore
buildserver/.gitignore
buildserver/Vagrantfile [new file with mode: 0644]
hooks/pre-commit
makebuildserver

index cd84eae19938dd79385dbf6016156e1faa8129cd..8bff77fa5120ac5896098c8889afaa31d8645cf9 100644 (file)
@@ -19,7 +19,6 @@ tmp/
 tests/repo/icons*
 
 # files used in manual testing
-/buildserver/Vagrantfile.yaml
 /config.py
 /tmp/
 /logs/
index 4a3901edbe24162d7cfe376fff111c633da1fc45..d8165d61a423c6cd4a3c25807526069b5d76c5f1 100644 (file)
@@ -1,4 +1,4 @@
 .vagrant
 up.log
 cache/
-Vagrantfile
+Vagrantfile.yaml
diff --git a/buildserver/Vagrantfile b/buildserver/Vagrantfile
new file mode 100644 (file)
index 0000000..e586e05
--- /dev/null
@@ -0,0 +1,70 @@
+
+require 'yaml'
+configfile = YAML.load_file('Vagrantfile.yaml')
+
+Vagrant.configure("2") do |config|
+
+  if Vagrant.has_plugin?("vagrant-cachier")
+    config.cache.scope = :box
+    config.cache.auto_detect = false
+    config.cache.enable :apt
+    config.cache.enable :chef
+  end
+
+  config.vm.box = configfile['basebox']
+  config.vm.box_url = configfile['baseboxurl']
+
+  config.vm.provider "virtualbox" do |v|
+    v.customize ["modifyvm", :id, "--memory", configfile['memory']]
+    v.customize ["modifyvm", :id, "--cpus", configfile['cpus']]
+    v.customize ["modifyvm", :id, "--hwvirtex", configfile['hwvirtex']]
+  end
+
+  config.vm.boot_timeout = configfile['boot_timeout']
+
+  config.vm.provision :shell, :path => "fixpaths.sh"
+
+  if configfile.has_key? "aptproxy"
+    config.vm.provision :shell, path: "provision-apt-proxy",
+      args: [configfile["aptproxy"]]
+  end
+
+  # buildserver/ is shared to the VM's /vagrant by default so the old
+  # default does not need a custom mount
+  if configfile["cachedir"] != "buildserver/cache"
+    config.vm.synced_folder configfile["cachedir"], '/vagrant/cache',
+      owner: 'root', group: 'root', create: true
+  end
+
+  # cache .deb packages on the host via a mount trick
+  if configfile.has_key? "aptcachedir"
+    config.vm.synced_folder configfile["aptcachedir"], "/var/cache/apt/archives",
+      owner: 'root', group: 'root', create: true
+  end
+
+  config.vm.provision "shell", path: "setup-env-vars",
+    args: ["/home/vagrant/android-sdk"]
+  config.vm.provision "shell", path: "provision-apt-get-install",
+    args: [configfile['debian_mirror']]
+
+  config.vm.provision :chef_solo do |chef|
+    chef.cookbooks_path = "cookbooks"
+    chef.log_level = :debug
+    chef.add_recipe "kivy"
+  end
+
+  config.vm.provision "shell", path: "provision-android-sdk"
+  config.vm.provision "shell", path: "provision-android-ndk",
+    args: ["/home/vagrant/android-ndk"]
+  config.vm.provision "shell", path: "provision-pip",
+    args: ["compare-locales"]
+  config.vm.provision "shell", path: "provision-gradle"
+  config.vm.provision "file", source: "gradle",
+    destination: "/opt/gradle/bin/gradle"
+
+  # let Ubuntu/trusty's paramiko work with the VM instance
+  if `uname -v`.include? "14.04"
+    config.vm.provision "shell", path: "provision-ubuntu-trusty-paramiko"
+  end
+
+end
index 9f0dcb77242b1624c8e1fa76b6facf4ab9bc74ef..1929ee9116637d695cd1445feddd2469305dfc3e 100755 (executable)
@@ -12,7 +12,7 @@ if [ -z "$files" ]; then
     PY_TEST_FILES="tests/*.TestCase"
     SH_FILES="hooks/pre-commit"
     BASH_FILES="fd-commit jenkins-build docs/update.sh completion/bash-completion buildserver/provision-*"
-    RB_FILES="buildserver/cookbooks/*/recipes/*.rb"
+    RB_FILES="buildserver/cookbooks/*/recipes/*.rb buildserver/Vagrantfile"
 else
     # if actually committing right now, then only run on the files
     # that are going to be committed at this moment
index 15a29868fe85fd9defa13f4c7c33bf668cf43c3d..62fee88deb5decbe818df6bd0f96b76515dc5064 100755 (executable)
@@ -71,6 +71,7 @@ if os.path.exists('makebuildserver.config.py'):
 elif os.path.exists('makebs.config.py'):
     # this is the old name for the config file
     exec(compile(open('makebs.config.py').read(), 'makebs.config.py', 'exec'), config)
+del(config['__builtins__'])  # added by compile/exec
 
 if not os.path.exists('makebuildserver') or not os.path.exists(serverdir):
     print('This must be run from the correct directory!')
@@ -320,94 +321,15 @@ elif os.path.exists('/proc/cpuinfo'):
     if 'vmx' in contents or 'svm' in contents:
         config['hwvirtex'] = 'on'
 
-del(config['__builtins__'])  # added by compile/exec
-with open(os.path.join(serverdir, 'Vagrantfile.yaml'), 'w') as f:
-    yaml.dump(config, f)
-
-# Generate an appropriate Vagrantfile for the buildserver, based on our
-# settings...
-vagrantfile = """
-require 'yaml'
-configfile = YAML.load_file('Vagrantfile.yaml')
-
-Vagrant.configure("2") do |config|
-
-  if Vagrant.has_plugin?("vagrant-cachier")
-    config.cache.scope = :box
-    config.cache.auto_detect = false
-    config.cache.enable :apt
-    config.cache.enable :chef
-  end
-
-  config.vm.box = configfile['basebox']
-  config.vm.box_url = configfile['baseboxurl']
-
-  config.vm.provider "virtualbox" do |v|
-    v.customize ["modifyvm", :id, "--memory", configfile['memory']]
-    v.customize ["modifyvm", :id, "--cpus", configfile['cpus']]
-    v.customize ["modifyvm", :id, "--hwvirtex", configfile['hwvirtex']]
-  end
-
-  config.vm.boot_timeout = configfile['boot_timeout']
-
-  config.vm.provision :shell, :path => "fixpaths.sh"
-
-  if configfile.has_key? "aptproxy"
-    config.vm.provision :shell, path: "provision-apt-proxy",
-      args: [configfile["aptproxy"]]
-  end
-
-  # buildserver/ is shared to the VM's /vagrant by default so the old
-  # default does not need a custom mount
-  if configfile["cachedir"] != "buildserver/cache"
-    config.vm.synced_folder configfile["cachedir"], '/vagrant/cache',
-      owner: 'root', group: 'root', create: true
-  end
-
-  # cache .deb packages on the host via a mount trick
-  if configfile.has_key? "aptcachedir"
-    config.vm.synced_folder configfile["aptcachedir"], "/var/cache/apt/archives",
-      owner: 'root', group: 'root', create: true
-  end
-
-  config.vm.provision "shell", path: "setup-env-vars",
-    args: ["/home/vagrant/android-sdk"]
-  config.vm.provision "shell", path: "provision-apt-get-install",
-    args: [configfile['debian_mirror']]
-
-  config.vm.provision :chef_solo do |chef|
-    chef.cookbooks_path = "cookbooks"
-    chef.log_level = :debug
-    chef.add_recipe "kivy"
-  end
-
-  config.vm.provision "shell", path: "provision-android-sdk"
-  config.vm.provision "shell", path: "provision-android-ndk",
-    args: ["/home/vagrant/android-ndk"]
-  config.vm.provision "shell", path: "provision-pip",
-    args: ["compare-locales"]
-  config.vm.provision "shell", path: "provision-gradle"
-  config.vm.provision "file", source: "gradle",
-    destination: "/opt/gradle/bin/gradle"
-
-  # let Ubuntu/trusty's paramiko work with the VM instance
-  if `uname -v`.include? "14.04"
-    config.vm.provision "shell", path: "provision-ubuntu-trusty-paramiko"
-  end
-
-end
-"""
-
-
-# Check against the existing Vagrantfile, and if they differ, we need to
-# create a new box:
-vf = os.path.join(serverdir, 'Vagrantfile')
+# Check against the existing Vagrantfile.yaml, and if they differ, we
+# need to create a new box:
+vf = os.path.join(serverdir, 'Vagrantfile.yaml')
 writevf = True
 if os.path.exists(vf):
     vagrant(['halt'], serverdir)
-    with open(vf, 'r') as f:
-        oldvf = f.read()
-    if oldvf != vagrantfile:
+    with open(vf, 'r', encoding='utf-8') as f:
+        oldconfig = yaml.load(f)
+    if config != oldconfig:
         print("Server configuration has changed, rebuild from scratch is required")
         vagrant(['destroy', '-f'], serverdir)
     else:
@@ -416,9 +338,8 @@ if os.path.exists(vf):
 else:
     print("No existing server - building from scratch")
 if writevf:
-    with open(vf, 'w') as f:
-        f.write(vagrantfile)
-
+    with open(vf, 'w', encoding='utf-8') as f:
+        yaml.dump(config, f)
 
 print("Configuring build server VM")
 returncode, out = vagrant(['up', '--provision'], serverdir, printout=True)